关于微信小程序登录获取unionId解密报错

解密获取微信unionId标识时经常会发生解密失败的错误,net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of,小程序上线了一段时间,解密失败的频率越来越高(一般发生长时间未调用后第一次调用),百思不得其解,后台查阅了微信的官方文档,反复测验发现了原因。

其实解密失败,主要原因当初加密的时使用的钥匙与解密时的钥匙不一致,也就是我们拿到的sessionKey与 encryptedData其实不匹配。微信登录时需要调用 wx.login()getUserInfo()两个方法,login拿到的是code,通过code2Session然后获取到sessionKey(也就是我们解密时用的钥匙),getUserInfo获取的是encryptedData加密数据包。

这里注意查看文档,login调用时是有可能会刷新sessionKey的,所以这里会有一个调用顺序问题,如果login发生在getUserInfo方法之后,过了最短周期调用时,sessionKey可能被刷新了,而你拿encryptedData还是使用刷新之前的,所以肯定就不匹配了。

总结:

一定要严格按照步骤 wx.login()→wx.getUserInfo()→解密获取unionId(通过code2SessionKey拿到sessionKey,解密encryptedData)

关于登录具体流程可以参考上一篇博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值