首页 >> 知识 >> 微信小程序与公众号关联(同一主体),获取unionId并关联公众号openid

微信小程序与公众号关联(同一主体),获取unionId并关联公众号openid

背景

有一些同学在实际开发中,会有通过微信的openid获取公众号的openid,或者其他内容,这几天正好在研究这个功能的实现(已实现),现做思路上的简单分享,希望能对需要解决该问题的同学有所帮助,有误之处敬请指正。

工作流程

开发工具 工具/语言/依赖版本备注uniapp2023-12Springboot2.1.12.RELEASEweixin-java-miniapp4.1.0Springboot依赖包,兼容性请自行解决 问题

1.通过微信openid获取公众号的openid

2.通过unionid获取公众号的openid

3.其他通过openid、unionid相互获取

微信官方说明

极其重要:同一主体下的小程序与公众号未关联,无法在使用uni.login时通过code获取到unionid.

前置工作

解决该问题的大前提:在微信·开放平台对应路径绑定小程序、绑定公众号

具体操作:(略)

开发逻辑

整体思路:通过unionid关联微信小程序openid与公众号openid

1.微信小程序发起微信登录请求,需发送有效的code至后端待后续换取session信息;

2.微信小程序业务实现接口:存储获取到的微信小程序openid、unionid,备用;

3.微信公众号业务实现接口:获取accessToken、获取用户列表(主要是获取openid)、批量获取用户列表(关注与未关注的用户完整信息);

4.使用批量获取的用户列表结果中通过第二步中拿到的uinonid获取公众号的openid即可。

开发准备

Springboot 项目添加依赖

    com.github.binarywang    weixin-java-miniapp    4.1.0​ 开发实操 1.java后端使用code置换seesion信息 // 1.获取微信会话信息WxMaJscode2SessionResult sessionResult = wxService.getUserService().getSessionInfo(code); 2.存储微信小程序openid、session_key、unionid 3.微信公众号获取信息 3.1 获取access_token https请求方式: GET url: http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRETAPPID: 公众号appidAPPSECRET: 公众号的appsecret 3.2 获取公众号用户列表 获取关注微信公众号用户列表/** * http请求方式:get * url: http://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN * http请求返回的数据 * { * "total": 7, * "count": 7, * "data": { * "openid": [ * "onitD6eh2CmVAjJyvXvjgaTmWVQo", * "onitD6Rtzk8LYeTHIk07OseyIWI8", * "onitD6SUQfEerhm7qhQvB5zRK6t4", * "onitD6eSfArnbPs3RxoQu64ALFgU", * "onitD6XQDKdWaYw2GUwEo1GYamkg", * "onitD6fg0vwdpAnJR2rb3dkxPkqw", * "onitD6StpbW2Nn7Srzl9J4WjShJ8" * ] * }, * "next_openid": "onitD6StpbW2Nn7Srzl9J4WjShJ8" * } */ 3.3 批量请求用户信息 批量获取用户信息的请求参数:/** * 批量请求用户信息的数据格式 * http方式: POST * url: http://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN * { * "user_list": [ * { * "openid": "xxxx", * "lang": "zh_CN" * }, * { * "openid": "xxxx", * "lang": "zh_CN" * } * ] * } */ 批量获取用户信息的返回结果:/** * 批量请求用户信息返回结果数据格式 * url: http://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN * http方式: POST * 返回结果: * { * "user_info_list": [ * { * "subscribe": 1, * "openid": "xxxx", * "language": "zh_CN", * * "subscribe_time": 1434093047, * "unionid": "xxxx", * "remark": "", * * "groupid": 0, * "tagid_list":[128,2], * "subscribe_scene": "ADD_SCENE_QR_CODE", * "qr_scene": 98765, * "qr_scene_str": "" * * }, * { * "subscribe": 0, * "openid": "xxxx" * } * ] * } */第一个为已关注的用户第二个为未关注的用户 4.使用第四步中的返回结果unionid与第二步中微信小程序获取到的unionid关联

综上就完成了微信小程序与微信公众号信息的关联。

至于其他信息的关联和处理请大家自行想办法,至此结束。

Java与uniapp代码目前还未开放,待后续提供至个人github仓库。

有问题可以联系我:code_captain@163.com

网站地图