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

2024-03-13 14:12

本文主要是介绍微信小程序与公众号关联(同一主体),获取unionId并关联公众号openid,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

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

开发工具

工具/语言/依赖版本备注
uniapp2023-12
Springboot2.1.12.RELEASE
weixin-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 项目添加依赖

<!-- 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信息

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

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

3.微信公众号获取信息

3.1 获取access_token
https请求方式: GET 
url: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRETAPPID: 公众号appid
APPSECRET: 公众号的appsecret
3.2 获取公众号用户列表
获取关注微信公众号用户列表/*** 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 批量请求用户信息
批量获取用户信息的请求参数:/*** 批量请求用户信息的数据格式* 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"*         }*     ]* }*/
批量获取用户信息的返回结果:/*** 批量请求用户信息返回结果数据格式* 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

这篇关于微信小程序与公众号关联(同一主体),获取unionId并关联公众号openid的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805137

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Spring Boot中获取IOC容器的多种方式

《SpringBoot中获取IOC容器的多种方式》本文主要介绍了SpringBoot中获取IOC容器的多种方式,包括直接注入、实现ApplicationContextAware接口、通过Spring... 目录1. 直接注入ApplicationContext2. 实现ApplicationContextA

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm