微信小程序首次登陆失败,第二次成功登录的解决办法

1,091 阅读1分钟

其实很简单,就是流程问题出了错,网上也有很多人同样的错误,其实只要改一下调用顺序就可以,出现这种问题的一般是这种流程

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);

              // this.getSessionKey(res.code, e.detail.encryptedData, e.detail.iv);
            }
          }
        })
      },
      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,但是官方已经给出了解决方案,但是时间有点久 我找不到链接了,希望看到官方回应的可以动手看一看