🎏:你只管努力,剩下的交给时间
🏠 :小破站
微信公众平台、公众号、小程序联动
- 如何通过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;// 获取tokenString accessToken = WechatUtil.getWechatAccessToken();int maxQueryNum = 99;if (StrUtil.isNotBlank(accessToken)) {// 获取微信公众号用户列表openidMap<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一致,则返回openidif (StrUtil.equals(unionid, oldUnionid)) {result = openid;break;}}}}}return result;
}
如何根据code获取微信公众openid以及unionid
这里使用网页授权
这个网页可以嵌入到公众号,点击授权进行用户绑定
1、前端获取到code,传给后端获取openid以及unionid
2、后端除返回openid以及unionid外,将绑定状态一起返回
3、前端进行判断,如果未进行绑定,即需要登录绑定
小程序获取unionid
官方文档说明
通过code换取oppenid以及unionid