线上环境。
5个用户测试,其中一个用户(iphone8p)连续4次获取手机号失败之后才成功了。
不知道是什么原因?
//登录,获取手机号
login: function (e) {
console.log(e.detail.errMsg);
// 如果用户授权且微信已绑定手机号
if (e.detail.iv) {
app.showLogin();
const sys=wx.getSystemInfoSync();//获取手机和型号
const brand=sys.brand || '';
const model=sys.model || '';
wx.login({
success: res => {
console.log('发code到后台换取 openid, sessionKey');
if (res.code) {
wx.request({
url: app.globalData.appUrl + 'login',
method: 'POST',
data: {
code: res.code,
iv: e.detail.iv,
encryptedData: e.detail.encryptedData,
brand:brand,
model:model
},
success: (res) => {
if (res.data.openid) {
console.log(res.data);
wx.hideLoading();
wx.setStorageSync('openid', res.data.openid); //拿到openid存本地
this.setData({
isLogin: true,
});
this.getData(res.data);//调用共用方法--得出所有数据
wx.hideLoading();
// this.stickyTop();//再次算出固定栏距离顶部的距离
} else {//解密手机号失败等
console.log(res.data.errCode);
app.loginFail();
}
},
fail: () => {//wx.request失败--情况很少
app.loginFail();
}
})
} else {//没有获取到code--情况很少
app.loginFail();
}
},
fail: () => {//wx.login失败--情况很少
app.loginFail();
}
})
} else if (e.detail.errMsg.indexOf('10000') !== -1) {
//用户未绑定手机号
console.log('未绑定手机');
this.setData({
showHint: true
})
}
// else 用户拒绝授权--不管了
},
确实是这样的,死循环。 什么时间获取code都不合适
就是!
遇到过但是一直没法解决,因为这东西你都不知道哪里错了,返回结果是填充无效,要是我们写的有问题为什么有的可以,没找到过官方建议,之前我们获取unionId也是这种错误,后来反馈了一下,把获取code和iv的先后顺序换了一下就再没出过问题,正常来说这两个都是新获取的跟先后顺序应该没关系,解决了都不知道为啥
说到我心坎里了!
每次开发微信总感觉自己像个搞ui的新手前端在那调样式,成功与否都凭运气,也都不知道为什么成功或失败了。
我本地调试的时候返回的错误信息一般是解密失败,好像是41003错误码,但是用户登录失败的时候也没办法调试,所以也不知道究竟错哪了。
有空的话可否把那个先后顺序跟我说一下呢?我把代码贴上去了。
是这样的,我们获取UnioID时候,之前是先获取data iv在获取code,后来换了一下,先获取code再获取iv就好了,但是这个手机号需要授权,只能先获取iv
了解了,非常感谢!
等以后用到unionid的时候可以少踩雷了。
那是因为你之前获取的data是用的失效的session_key加密的,再获取code刷新了session_key,当然会有概率解密失败,导致获取不到。
你把顺序换一下就能保证session_key一致了,所以不会失败了
应该不是 code 与 iv 先后问题,你也可以先获取 code啊,打开页面的时候获取,接着setData,然后获取手机号码的时候 code = that.data.code
恐怖的回调地狱,微信改善一下吧
同意!