最近做微信授权登录获取手机号有时会出现41003问题,研究半天网上查了不少资料,梳理下过程:
从文档可知主要是wx.login()获取code顺序问题
<button class="btn" style="width: 100%;" bindgetphonenumber="getPhoneNumber" open-type="getPhoneNumber" hover-class="none">手机号注册</button>
wx.login()里code的获取是不能放在 button的open-type="getPhoneNumber"的回调函数getPhoneNumber里面的,code应该是需要提前获取,放在onShow中。以下js部分代码:
getPhoneNumber(e) {
console.log(e)
let _this = this
$api.get('/api/user/getWxPhone', {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
code: wx.getStorageSync('code'),
}).then(resp=>{
wx.showToast({
title: '获取手机号成功',
icon: 'none'
})
_this.setData({
mobile: resp.data.phoneNumber
})
})
},
wxlogin(){
wx.login({
success (res) {
if (res.code) {
wx.setStorageSync('code', res.code);
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.wxlogin()
// 微信登录code有效期 五分钟
this.loginStatus = setInterval(() => {
this.wxlogin()
}, 300000)
},
然后在登录成功跳转页面的位置,清除定时器,如下:
if (this.loginStatus) {
clearInterval(this.loginStatus)
}
这样授权登录获取手机号偶现41003问题解决了...