解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题
微信小程序使用手机号快速验证组件在获取用户手机号的时候,经常会因为提交参数的code和iv、encryptedData参数匹配不一致而报错。其根本原因在官方有相应的解释:注意使用旧版本组件时,需先调用wx.login接口。所以在用户点了拒绝之后授权之后,需要重新获取调用wx.login获取最新code。
所以,基于code需要在bindgetphonenumber事件的回调之前获取,这里给出一个比较合理且通用的解决方案:文章来源地址https://www.toymoban.com/news/detail-501901.html
- 利用wx.checkSession校验当前code的有效性。
// 检查最新的微信code
getLastNewCode(code) {
return new Promise(resolve => {
wx.checkSession({
success: () => {
// session_key 未过期,并且在本生命周期一直有效
console.log('检查最新的微信code: session_key 未过期');
resolve(code);
},
fail: async () => {
// session_key 已经失效,需要重新执行登录流程
// 重新登录
console.log('session_key 已经失效: 开始重新授权');
const wxCode = await getWxCode();
this.setData({ wxCode });
resolve(code);
}
});
});
},
- 在bindgetphonenumber回调里面对code进行校验
// 获取用户手机号
async getPhoneNumber(e) {
console.log('getPhoneNumber:', e);
const {
detail: { encryptedData, iv, errMsg }
} = e;
const {
data: { wxCode }
} = this;
// 获取最新登录code
const code = await this.getLastNewCode(wxCode);
if (errMsg != 'getPhoneNumber:ok') {
return;
}
// 1.获取用户手机号--接口请求
parsePhoneNumber({ code, encryptedData, iv })
.then(data => {
console.log('parsePhoneNumber:', data);
this.setData({ mobile: data.purePhoneNumber });
this.handelContinue();
})
.catch(() => {});
},
文章来源:https://www.toymoban.com/news/detail-501901.html
到了这里,关于解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!