口水话记录一下之前遇到的问题:
在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行login
;或者在回调中先使用checkSession
进行登录态检查,避免login
刷新登录态。
也就是说在触发getPhoneNumber方法(用户点击button)之前,就需要获取最新code;
因为调用getPhoneNumber方法就相当于获取到当前code对应的加密手机号,获取到了 然后再去wx.login就会刷新code,旧的加密和新的code肯定解密失败。
最好是在生命周期里面就获取最新的code保存下来
onLoad: function (options) {
let that = this
wx.checkSession({
success() {
// console.log('session_key 未过期,并且在本生命周期一直有效')
that.setData({
code: wx.getStorageSync('code')
})
},
fail() {
// console.log('session_key 已经失效,需要重新执行登录流程')
wx.login({
success(res) {
if (res.code) {
that.setData({
code: res.code
})
}
}
})
}
})
}
这就是 自己bug 不想改 真垃圾