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

背景

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

开发工具

工具/语言/依赖 版本 备注
uniapp 2023-12
Springboot 2.1.12.RELEASE
weixin-java-miniapp 4.1.0 Springboot依赖包,兼容性请自行解决

问题

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 项目添加依赖

xml 复制代码
<!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-miniapp -->
<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-miniapp</artifactId>
    <version>4.1.0</version>
</dependency>

​

开发实操

1.java后端使用code置换seesion信息

ini 复制代码
// 1.获取微信会话信息
WxMaJscode2SessionResult sessionResult = wxService.getUserService().getSessionInfo(code);

2.存储微信小程序openid、session_key、unionid

3.微信公众号获取信息

3.1 获取access_token

makefile 复制代码
https请求方式: GET 
url: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

APPID: 公众号appid
APPSECRET: 公众号的appsecret

3.2 获取公众号用户列表

markdown 复制代码
获取关注微信公众号用户列表

/**
 * http请求方式:get
 * url: https://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 批量请求用户信息

bash 复制代码
批量获取用户信息的请求参数:

/**
 * 批量请求用户信息的数据格式
 * http方式: POST
 * url: https://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"
 *         }
 *     ]
 * }
 */
bash 复制代码
批量获取用户信息的返回结果:

/**
 * 批量请求用户信息返回结果数据格式
 * url: https://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

相关推荐
程序员入门进阶6 小时前
基于微信小程序的电子购物系统的设计与实现(lw+演示+源码+运行)
微信小程序·小程序
我很苦涩的11 小时前
微信小程序使用uni cli框架绘制echarts图表
微信小程序·小程序·echarts
慢慢雨夜13 小时前
uniapp发布到微信小程序,提示接口未配置在app.json文件中
微信小程序·小程序·uni-app
杨天天.17 小时前
微信小程序原生 canvas画布截取视频帧保存为图片并进行裁剪
微信小程序·小程序·音视频
一介青烟小生18 小时前
微信小程序自定义tabbar;禁用某个tab;修改某个tab的样式
微信小程序·小程序·notepad++
尘浮生18 小时前
Java项目实战II基于微信小程序的订餐系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序
孩子 你要相信光21 小时前
HBuilderX运行微信小程序,编译的文件在哪,怎么运行
微信小程序·小程序
烤奶要加冰1 天前
uniapp解析蓝牙设备响应数据bug
前端·微信小程序·uni-app
Ares码农人生1 天前
vue.js组件和传值以及微信小程序组件和传值
vue.js·微信小程序·uniapp
尘浮生1 天前
Java项目实战II基于微信小程序的实习记录(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·小程序