Skip to content

Commit a6d73a2

Browse files
committed
#409 实现企业微信的userid与openid互换接口
1 parent 0b7c1da commit a6d73a2

File tree

3 files changed

+102
-2
lines changed

3 files changed

+102
-2
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpUserService.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import me.chanjar.weixin.cp.bean.WxCpUser;
55

66
import java.util.List;
7+
import java.util.Map;
78

89
/**
910
* <pre>
@@ -90,6 +91,46 @@ public interface WxCpUserService {
9091
* @param userId 用户的userid
9192
* @param inviteTips 推送到微信上的提示语(只有认证号可以使用)。当使用微信推送时,该字段默认为“请关注XXX企业号”,邮件邀请时,该字段无效。
9293
* @return 1:微信邀请 2.邮件邀请
94+
* @deprecated api obsoleted. 邀请关注的功能微信企业号已经下线了,
95+
* 详细请参考该链接点击查看 https://qy.weixin.qq.com/cgi-bin/homepagenotify?action=get&id=46
9396
*/
97+
@Deprecated
9498
int invite(String userId, String inviteTips) throws WxErrorException;
99+
100+
/**
101+
* <pre>
102+
* userid转openid.
103+
* 该接口使用场景为微信支付、微信红包和企业转账。
104+
*
105+
* 在使用微信支付的功能时,需要自行将企业微信的userid转成openid。
106+
* 在使用微信红包功能时,需要将应用id和userid转成appid和openid才能使用。
107+
* 注:需要成员使用微信登录企业微信或者关注微信插件才能转成openid
108+
*
109+
* 文档地址:https://work.weixin.qq.com/api/doc#11279
110+
* </pre>
111+
*
112+
* @param userId 企业内的成员id
113+
* @param agentId 非必填,整型,仅用于发红包。其它场景该参数不要填,如微信支付、企业转账、电子发票
114+
* @return map对象,可能包含以下值:
115+
* - openid 企业微信成员userid对应的openid,若有传参agentid,则是针对该agentid的openid。否则是针对企业微信corpid的openid
116+
* - appid 应用的appid,若请求包中不包含agentid则不返回appid。该appid在使用微信红包时会用到
117+
*/
118+
Map<String, String> userId2Openid(String userId, Integer agentId) throws WxErrorException;
119+
120+
/**
121+
* <pre>
122+
* openid转userid
123+
*
124+
* 该接口主要应用于使用微信支付、微信红包和企业转账之后的结果查询。
125+
* 开发者需要知道某个结果事件的openid对应企业微信内成员的信息时,可以通过调用该接口进行转换查询。
126+
* 权限说明:
127+
* 管理组需对openid对应的企业微信成员有查看权限。
128+
*
129+
* 文档地址:https://work.weixin.qq.com/api/doc#11279
130+
* </pre>
131+
*
132+
* @param openid 在使用微信支付、微信红包和企业转账之后,返回结果的openid
133+
* @return userid 该openid在企业微信对应的成员userid
134+
*/
135+
String openid2UserId(String openid) throws WxErrorException;
95136
}

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImpl.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.chanjar.weixin.cp.api.impl;
22

3+
import com.google.common.collect.Maps;
34
import com.google.gson.*;
45
import com.google.gson.reflect.TypeToken;
56
import me.chanjar.weixin.common.exception.WxErrorException;
@@ -10,6 +11,7 @@
1011
import org.apache.commons.lang3.StringUtils;
1112

1213
import java.util.List;
14+
import java.util.Map;
1315

1416
/**
1517
* <pre>
@@ -114,6 +116,7 @@ public List<WxCpUser> listSimpleByDepartment(Integer departId, Boolean fetchChil
114116
}
115117

116118
@Override
119+
@Deprecated
117120
public int invite(String userId, String inviteTips) throws WxErrorException {
118121
String url = "https://qyapi.weixin.qq.com/cgi-bin/invite/send";
119122
JsonObject jsonObject = new JsonObject();
@@ -125,4 +128,37 @@ public int invite(String userId, String inviteTips) throws WxErrorException {
125128
JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
126129
return tmpJsonElement.getAsJsonObject().get("type").getAsInt();
127130
}
131+
132+
@Override
133+
public Map<String, String> userId2Openid(String userId, Integer agentId) throws WxErrorException {
134+
String url = "https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid";
135+
JsonObject jsonObject = new JsonObject();
136+
jsonObject.addProperty("userid", userId);
137+
if (agentId != null) {
138+
jsonObject.addProperty("agentid", agentId);
139+
}
140+
141+
String responseContent = this.mainService.post(url, jsonObject.toString());
142+
JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
143+
Map<String, String> result = Maps.newHashMap();
144+
if (tmpJsonElement.getAsJsonObject().get("openid") != null) {
145+
result.put("openid", tmpJsonElement.getAsJsonObject().get("openid").getAsString());
146+
}
147+
148+
if (tmpJsonElement.getAsJsonObject().get("appid") != null) {
149+
result.put("appid", tmpJsonElement.getAsJsonObject().get("appid").getAsString());
150+
}
151+
152+
return result;
153+
}
154+
155+
@Override
156+
public String openid2UserId(String openid) throws WxErrorException {
157+
String url = "https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_userid";
158+
JsonObject jsonObject = new JsonObject();
159+
jsonObject.addProperty("openid", openid);
160+
String responseContent = this.mainService.post(url, jsonObject.toString());
161+
JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
162+
return tmpJsonElement.getAsJsonObject().get("userid").getAsString();
163+
}
128164
}

weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpUserServiceImplTest.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@
66
import me.chanjar.weixin.cp.bean.WxCpUser;
77
import org.apache.commons.lang3.builder.ToStringBuilder;
88
import org.apache.commons.lang3.builder.ToStringStyle;
9-
import org.testng.annotations.*;
9+
import org.testng.annotations.Guice;
10+
import org.testng.annotations.Test;
1011

1112
import java.util.List;
13+
import java.util.Map;
1214

13-
import static org.testng.Assert.*;
15+
import static org.testng.Assert.assertNotEquals;
16+
import static org.testng.Assert.assertNotNull;
1417

1518
/**
1619
* <pre>
@@ -83,4 +86,24 @@ public void testListSimpleByDepartment() throws Exception {
8386
}
8487
}
8588

89+
@Test
90+
@Deprecated
91+
public void testInvite() throws Exception {
92+
int result = this.wxCpService.getUserService().invite(userId, "");
93+
System.out.println(result);
94+
}
95+
96+
@Test
97+
public void testUserId2Openid() throws Exception {
98+
Map<String, String> result = this.wxCpService.getUserService().userId2Openid(userId, null);
99+
System.out.println(result);
100+
assertNotNull(result);
101+
}
102+
103+
@Test
104+
public void testOpenid2UserId() throws Exception {
105+
String result = this.wxCpService.getUserService().openid2UserId(userId);
106+
System.out.println(result);
107+
assertNotNull(result);
108+
}
86109
}

0 commit comments

Comments
 (0)