欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

获取手机号偶尔报错(code失效问题)

程序员文章站 2022-11-05 09:55:50
前言:获取手机号的时候有时候成功,有时候失败,主要原因是我们获取的code失效。正常的点击逻辑用户点击第一次获取手机号的时候是必须要成功的,成功后点第二次的时候报错也没关系,因为第一次成功了,已经有了数据,第二次报错并不影响什么,主要第一次必须成功就可以了。下面我们要怎么解决第一次必须成功呢?首先我们要知道原因是code失效导致的,所以我们第一步要在点击获取手机的按钮之前要有code代码呈现在微信生命周期获取code,并放在data里面保存,我实在onShow生命周期进行保存。wx.lo...

前言:
获取手机号的时候有时候成功,有时候失败,主要原因是我们获取的code失效。

正常的点击逻辑
用户点击第一次获取手机号的时候是必须要成功的,成功后点第二次的时候报错也没关系,因为第一次成功了,已经有了数据,第二次报错并不影响什么,主要第一次必须成功就可以了。

下面我们要怎么解决第一次必须成功呢?
首先我们要知道原因是code失效导致的,所以我们第一步要在点击获取手机的按钮之前要有code

代码呈现

  1. 在微信生命周期获取code,并放在data里面保存,我实在onShow生命周期进行保存。
wx.login({
   success: res => {
       this.setData({code: res.code})    //记得在data里面定义一个code
   },
   fail: res => {
       //失败
   }
})
  1. 用微信官方获取手机号时间的button
<button plain="{{true}}" bindgetphonenumber="bindgetphonenumber" open-type="getPhoneNumber" >绑定手机号</button>
  1. 开始写获取手机号的事件
我用的是async
  async bindgetphonenumber(e) {
    if (e.detail.errMsg.includes('ok')) {
      const { encryptedData, iv } = e.detail
      let Id = wx.getAccountInfoSync();
      let appId = Id.miniProgram.appId
      let params = {
        code: this.data.code, // 刚刚获取的code
        appid: appId,
        secrect: '写的是你的秘钥'
      }
      //这是我自己封装的微信小程序的request,跟微信小程序的request一样,值相对应的好了
      let key = await request({ url: '写自己后台解密session_key的接口', data: params })
      wx.setStorageSync('sessKey', key.data)
      let sessionKey = key.data.session_key
      try {
        let phone = await request({ url: '写自己后台解密解密手机号的接口', data: { encryptedData, sessionKey, iv } })
        if (phone.statusCode == 200) {
          await showToast({title:'绑定成功'})
          let Token = phone.data.message.token
          let userId = phone.data.message.user_id
          let user_phone = phone.data.message.user_phone
          wx.setStorageSync('token', Token)
          wx.setStorageSync('userId', userId)
          wx.setStorageSync('user_phone', user_phone)
        }
      } catch (error) {
        console.log(error)
      }
    } else {
      await showToast({ title: '你点击了取消手机号授权...' })
    }
  },

后言:
如果你们写的逻辑跟我不一样的话,那你只要知道偶然手机号获取失败,是code失效导致的。我写的是第一次获取是必须成功的,不刷新页面的话,除了第一次其他都是会失败的,只要刷新页面,就会生成一个新的code,然后第一次还是必定会成功,然后除了第一次其他不会成功,我感觉这是符合正常的逻辑。如果觉得我的逻辑不是正常的话,那就按照你的逻辑走。

本文地址:https://blog.csdn.net/wupinlong/article/details/107482561