🎏:你只管努力,剩下的交给时间
🏠 :小破站
微信公众平台、公众号、小程序联动
- 如何通过unionid获取到微信公众openid
- 如何根据code获取微信公众openid以及unionid
- 小程序获取unionid
不管是小程序、公众平台还是微信公众号,最后与平台绑定的唯一关系就是unionid
首先和大家探讨一下相关的知识
1、公众平台可以绑定公众号、小程序、以及网站pc端
2、他们之间通过unionid
进行关联
3、不可以直接通过unionid获取到公众号的openid
如何通过unionid获取到微信公众openid
要想通过unionid获取到微信公众号openid。具体有如下几步
1、首先获取到acces_token
2、获取到用户列表
3、获取到用户详细信息(这里面就会存在unionid
)获取到用户详细信息
具体代码给大家贴出来,如下所示
public String getWxPublicAccountOpenId(String unionid) {
String result = null;
// 获取token
String accessToken = WechatUtil.getWechatAccessToken();
int maxQueryNum = 99;
if (StrUtil.isNotBlank(accessToken)) {
// 获取微信公众号用户列表openid
Map<String, Object> getOpenidMap = new HashMap<>(2);
log.info("accessToken:{}", accessToken);
getOpenidMap.put("access_token", accessToken);
getOpenidMap.put("next_openid", "");
HttpResponse userOpenidListResponse = HttpRequest.get("https://api.weixin.qq.com/cgi-bin/user/get").form(getOpenidMap).execute();
log.info("userOpenidListResponse:{}", JSON.toJSONString(userOpenidListResponse.body()));
// 获取详细用户信息
if (userOpenidListResponse.isOk()) {
JSONObject data = JSON.parseObject(userOpenidListResponse.body()).getJSONObject("data");
JSONArray openidList = data.getJSONArray("openid");
log.info("openidData:{}", data);
if (openidList != null && !openidList.isEmpty()) {
JSONArray userInfoList = new JSONArray();
int size = openidList.size();
// 分块处理openIdList,这里接口只能处理100条
for (int i = 0; i < size; i += maxQueryNum) {
int end = Math.min(i + maxQueryNum, size);
JSONArray subList = new JSONArray(openidList.subList(i, end));
JSONObject userInfoJson = WechatUtil.jsonArrayTo(subList);
log.info("userInfoJson:{}", JSON.toJSONString(userInfoJson));
HttpResponse userInfoResponse = HttpRequest.post("https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=" + accessToken)
.body(JSON.toJSONString(userInfoJson)).execute();
log.info("userInfoResponse:{}", JSON.toJSONString(userInfoResponse.body()));
if (userInfoResponse.isOk()) {
userInfoList.addAll(JSON.parseObject(userInfoResponse.body()).getJSONArray("user_info_list"));
}
}
log.info("userInfoList:{}", userInfoList);
for (Object userInfoObj : userInfoList) {
JSONObject userInfoJson = (JSONObject) userInfoObj;
String openid = userInfoJson.getString("openid");
String oldUnionid = userInfoJson.getString("unionid");
// 如果获取不到unionid,则跳过
if (StrUtil.isBlank(oldUnionid)) {
continue;
}
// 如果取到的unionid和传入的unionid一致,则返回openid
if (StrUtil.equals(unionid, oldUnionid)) {
result = openid;
break;
}
}
}
}
}
return result;
}
如何根据code获取微信公众openid以及unionid
这里使用网页授权
这个网页可以嵌入到公众号,点击授权进行用户绑定
1、前端获取到code,传给后端获取openid以及unionid
2、后端除返回openid以及unionid外,将绑定状态一起返回
3、前端进行判断,如果未进行绑定,即需要登录绑定
小程序获取unionid
官方文档说明
通过code换取oppenid以及unionid