其实很简单,就是流程问题出了错,网上也有很多人同样的错误,其实只要改一下调用顺序就可以,出现这种问题的一般是这种流程
graph TD
设置button按钮... --> 点button调用方法.... --> 在getPhoneNumber里把数值传给wx.login.......... --> 再从wx.loing获取code再传key给后台获取token...........
这样写是可以登录成功的,但是因为第一次登录code 没有先获取 ,而是获取手机号再获取,就会导致后台无法解密code码,所以要把wx.login 写在onLoad 里面 然后再按钮点击调用getPhoneNumber方法,这样他们的sessionkey就是一样的
onLoad(){
wx.login({
success: res => {
if(res.code){
console.log("112--------------------");
this.code = res.code;
console.log(this.code);
}
}
})
},
getPhoneNumber: function(e) {
if(e.detail.errMsg == "getPhoneNumber:fail user deny") {
wx.showToast({
icon: "none",
title: '请允许获取手机号,否则功能不可用!',
})
return
} else {
this.getSessionKey(this.code, e.detail.encryptedData, e.detail.iv);
}
},
getSessionKey: function(js_code, encryptedData, iv) {
requst.POST(getApp().globalData.httpIpConfig + '/blade-auth/oauth/token',
{
grant_type:'wx_miniapp',
appid: 'wx62812e04d0e0fad3',
code:this.code,
encryptedData,
iv
}
)
.then(res=>{
if(res.statusCode === 200){
wx.setStorage({
key:'access_token',
data:res.data.access_token
})
getApp().globalData.access_token = res.data.access_token
wx.setStorage({
key:'uerInfo',
data:res.data
})
wx.showToast({
title:'登陆成功',
icon:'success',
mask:true
})
wx.reLaunch({
url: "../index/index",
})
}else{
wx.showToast({
title:res.data.error_description,
icon:'none',
mask:true
})
}
})
.catch(err=>{
wx.showToast({
title:'登陆失败',
icon:'none',
mask:true
})
})
},
上面就是我的代码,这样写就可以避免第一次登录失败的情况,我之前以为是官方bug,但是官方已经给出了解决方案,但是时间有点久 我找不到链接了,希望看到官方回应的可以动手看一看