• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

关于小程序登录时获取openId和unionId走过的坑

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目前的项目是在做小程序这方面的,接触过的人应该都知道,同一个微信开放平台下的相同主体的App、公众号、小程序的unionid是相同的,这样就可以锁定是不是同一个用户。微信针对不同的用户在不同的应用下都有唯一的一个openId, 但是要想确定用户是不是同一个用户,就需要靠unionid来区分。一般自己的后台都会有自己的一个用户表,每个用户有不同的userid。也就是说同一个用户在同一个微信开放平台下的相同主体的应用对应着相同的userid,unionid以及不同的openid。所以在用户登录进来的时候,我们只能靠微信返回给我们的unionid去判断是不是同一个用户,在去关联我们的用户表,拿到对应的userid。

接下来就是在获取unionid时的一些小问题分享一下:

首先,前端调用wx.login的时候会返回一个code,这个code传到后台的时候,就需要去调用微信的接口(https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code)传入 code,appid,secret去换取到openid,session_key以及unionid等信息。这里就需要注意了。官方文档上说的是

如果用户已经关注公众号,或者曾经登录过App或公众号,则用户打开小程序时,开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

就是因为没有注意到这句话,所以后来改了好多东西,这里分为两种情况,

(1)用code换取的时候,返回了unionid,这样就皆大欢喜了,你可以根据unionid以及openid去判断该用户有没有用户信息,从而获取userid或者生产userid返回给前端

(2)悲剧的情况,unionid返回为null,这时候你没法儿关联出用户的userid。后来再去看官方文档的时候,发现有针对这种情况的方法。就是需要前端再去调wx.getUserInfo()这个接口。这时候微信会返回很多数据(详情见微信官方文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html),这些数据里面有一个encryptedData,这个数据中就包含你需要的unionid以及其他的很多用户信息啦。获取到以后将encryptedData、加密算法的初始向量iv返回给后端,后端根据这两个数据以及之前的session_key就可以解密出你需要的数据了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信h5页面/小程序内部,如何调用微信支付接口,弹出支付框。 ...发布时间:2022-07-18
下一篇:
小程序获取当前时间发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap