赞
踩
通过按钮点击触发登录,调用wx.login()发现每次登录,第一次都会失败,第二次就成功了。
点击获取手机号出现报错
原因
第一次获取手机号,微信使用的是当前session_key对手机号信息进行加密,而我们的session_key还是空的,或者用户之前登录过,那么session_key就是上一次登录的状态。解密失败。
第二次获取手机号,我们通过上次登录,获取了最新的session_key,服务端也存了同样的一份session_key,
微信加密和我们服务器解密使用的是同一份数据。解密成功。
如何解决
应该使得服务端session_key 和 当前session_key保持一致。
wx.login()需要在获取手机号之前调用或者在页面初始化的时候先进行wx.login
代码
<van-button type="primary" block color="rgba(0, 153, 255, 1)" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> <text>微信一键登录</text> </van-button>
//点击一键登录获取手机号 getPhoneNumber(e) { var that = this console.log(e,88888) wx.checkSession({ success() { that.getNumber(e.detail.encryptedData, e.detail.iv) }, fail() { wx.login({ success(res) { if (res.code) { console.log(res.code, 'sessionkey过期') that.getNumber(e.detail.encryptedData, e.detail.iv,res.code) } } }) } }) }, getNumber(encryptedData, iv,code) { console.log(333333333,code) wx.login({ success(res) { console.log(res,'wx.login') if (res.code) { login({ code: code!==undefined?code:res.code, encryptedData: encryptedData, iv: iv, }).then(res => { console.log(res) }).catch((err) => { console.log('error', err); }) } else { console.log('登录失败!' + res.errMsg) } } }) },
getCode() {
wx.login({
success(res) {
if (res.code) {
console.log('获取code', res.code)
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
onShow: function (n) {
console.log("onshow")
this.getCode()
},
注意
onShow 页面每次都刷新,onLoad 初次页面刷新
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。