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

本文介绍了一种确保在微信小程序中首次获取用户手机号成功的策略,通过在onShow生命周期获取并保存code,即使code失效,刷新页面后仍能生成新的code,确保首次获取手机号的成功率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:
获取手机号的时候有时候成功,有时候失败,主要原因是我们获取的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,然后第一次还是必定会成功,然后除了第一次其他不会成功,我感觉这是符合正常的逻辑。如果觉得我的逻辑不是正常的话,那就按照你的逻辑走。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值