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

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

关于微信小程序登录获取unionId解密报错_第1张图片

其实解密失败,主要原因当初加密的时使用的钥匙与解密时的钥匙不一致,也就是我们拿到的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)

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

你可能感兴趣的:(关于微信小程序登录获取unionId解密报错)