做了微信小程序,一切都还正常,但是末了体验版放出去常常,却发现良多用户回天乏术绑定用户,后台返回:参数不法。经过多方排查,发现是微信拿到的code恳求返回的数据里没有UnionId,也就是接口返回的参数中不包含UnionId参数。

1、UnionID机制说明

官网是这样引见的,如果开发者领有大都个移动应用、网站应用、和民众帐号(包罗小程序),但是经过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和大众帐号(包罗小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是雷同的。

简而言之,微信针对不同的用户在不同的应用下都有唯一的一个 openId,但是如果惦念确定用户是不是同一个用户,就需要靠 unionid 来区分。通常自己的后台城市有自己的一个用户表,每个用户有不同的 userid。也就是说同一个用户在同一个微信开放平台下的雷同主体的应用对应着雷同的 userid, unionid 以及不同的 openid。所以在用户登录进来的时分,我们只能靠微信返回给我们的 unionid 去判定是不是同一个用户,再去关系我们的用户表,拿到对应的 user_id。

留神: 后边这句话的描述:用户关注过民众号,或者曾经登录过App或大众号,则用户打开小程序经常,开发者可以直接经过wx.login获得到该用户UnionID。纵然:如果用户没有关注过大众号,或者没有登陆过App,经过wx.login是回天乏术获得到该用户UnionID,只能经过wx.getUserInfo来获得UnionId。经历证实,体系不存在UnionId的小程序用户都是没有关注大众号或未在App中利用微信授权的用户

2、题目背景

一般情形下(即使在登录小程序之前,已经关注过大众号或已经登录过民众号或已经利用微信登录的方法登录过app),用户通过以下两步就正常成功登录网站:

(1)wx.login获得code;

(2)通过code恳求后台,后台转发微信api用来换取openid及session_key等信息,此可以获得Unionid

另一种情形(即使在登录小程序之前,既没有关注过民众号,也没有登录过民众号,更没有应用微信登录的方法登录过app),经过 wx.login 的到的 code 换不转头 unionid 及 openid 等信息。

3、解决方案

获得小程序UnionId该当以wx.getUserInfo的UnionId为主。wx.getUserInfo需要用户授权,产品方面,需要考虑用户拒绝授权的处理流程。

wx.getUserInfo获得数据之后解密的办法,可以看官方文档。

解决思绪:通过带登录态的 wx.getUserInfo 获得到用户的加密数据 encryptedData 和加密算法的初始向量iv,然后将 encryptdata、iv 以及 code污染给后端,后端再去通过吸收到的encryptedData、iv以、code 以及之前的 session_key 解密出用户的 openid、unionid 等。加密数据解密算法


<仙宝云(www.xianboss.com)是国内著名商城体系及商城网站建设提供商,为企业级商家提供零售商城、B2B2C多用户商城系统、仙宝云商城体系、微信分销体系、小程序商城、商城源码等多端商城网站建设解决方案>

申明:本网站局部文章和图片起源网络编辑,如有侵权及时沟通删除,神仙宝商城原创文章,转载恳求注明根源。

立即

咨询

400电话

电话咨询

400-1875-778

微信咨询

李经理

微信扫一扫加好友

下载源码

返回顶部