微信公众平台unionID简介以及小程序获取unionID机制

每一个微信号基于微信官方不同的应用都会生出不同的openID(两个公众号,一个公众号一个小程序等)
如果我们的程序想要同一个用户在两个应用的openID或者关系能关联起来,
那么就需要unionID机制来完成
首先在同一个微信公众平台下绑定的不同微信应用对应同一个用户才会生成同一个unionID,
而且没有绑定过微信公众平台的时候,通过微信API访问的用户信息是没有unionID这个字段的

所以我们想拿unionID 需要先申请一个微信公众平台,将需要共享信息的各个微信应用绑定。

绑定的时候会提示同一个主体以及不同主体有数量限制
同一主体指的是同一个公司认证下的应用为同一主体公众号
这里我们只简单说小程序
在获取unionID的时候,有几种方法:
1、在用户没有关注过同主体的公众号前提下,可通过用户授权后获取用户个人敏感信息传给后台解密拿到
2、在用户关注过同主体的公众号前提下,只需要通过访问wx.login不需要用户授权即可拿到
3、可以将用户信息传给后台通过后台直接获取(还在验证中)

具体小程序API可访问微信官方文档获取~

### 微信小程序中通过 OpenID 获取 UnionID 在微信生态内,OpenID 是用户在一个特定的小程序中的唯一标识符,而 UnionID 则是在同一微信公众平台下的多个应用(包括公众号小程序等)之间的通用用户标识。对于已经绑定了微信开放平台账号的应用来说,可以通过用户的授权来获取 UnionID。 #### 接口说明 当开发者希望从小程序端获得用户的UnionID时,并不是直接基于OpenID去查询得到UnionID,而是应该利用`auth.code2Session`接口完成此操作[^3]。该过程涉及前端向后端发送临时登录凭证 code ,由服务器携带 appid secret 向微信服务器发起请求交换 session_key 及可能存在的 unionid 。需要注意的是只有当用户将小程序绑定到微信开放平台上之后才会返回 unionid 字段;如果未绑定,则不会提供 unionid 信息。 具体流程如下: 1. 用户同意授权给小程序; 2. 前端调用微信提供的 `wx.login()` 方法获取临时登录凭证(code); 3. 将code传送给自己的服务端; 4. 服务端使用appid,secret以及收到的code访问`https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code` URL 来换取 openId , session_key (还有可能是unionid); 5. 如果需要进一步处理加密数据(如头像昵称),则还需要解密 encryptedData 参数内的内容才能拿到完整的用户资料,这部分涉及到AES算法的具体实现,在某些框架中有现成工具可以直接调用,比如ThinkPHP 中的做法就是如此[^4]. ```php // PHP示例代码用于解密并获取unionid public function getUionid($sessionKey,$iv,$encryptedData){ /** * 通过$sessionKey,$iv,$encryptedData解密获取unionid */ vendor('wxunionid.wxBizDataCrypt'); $pc = new \WXBizDataCrypt($this->appId, $sessionKey); $unionId = $pc->decryptData($encryptedData, $iv, $data); return json_decode($unionId,true); } ``` 值得注意的是,上述过程中提到的服务端逻辑应当妥善保管好敏感信息(appid/secret/session_key), 并确保传输的安全性以防止泄露风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值