获取手机号偶尔报错(code失效问题)
程序员文章站
2022-11-05 09:55:50
前言:获取手机号的时候有时候成功,有时候失败,主要原因是我们获取的code失效。正常的点击逻辑用户点击第一次获取手机号的时候是必须要成功的,成功后点第二次的时候报错也没关系,因为第一次成功了,已经有了数据,第二次报错并不影响什么,主要第一次必须成功就可以了。下面我们要怎么解决第一次必须成功呢?首先我们要知道原因是code失效导致的,所以我们第一步要在点击获取手机的按钮之前要有code代码呈现在微信生命周期获取code,并放在data里面保存,我实在onShow生命周期进行保存。wx.lo...
前言:
获取手机号的时候有时候成功,有时候失败,主要原因是我们获取的code失效。
正常的点击逻辑
用户点击第一次获取手机号的时候是必须要成功的,成功后点第二次的时候报错也没关系,因为第一次成功了,已经有了数据,第二次报错并不影响什么,主要第一次必须成功就可以了。
下面我们要怎么解决第一次必须成功呢?
首先我们要知道原因是code失效导致的,所以我们第一步要在点击获取手机的按钮之前要有code
代码呈现
- 在微信生命周期获取code,并放在data里面保存,我实在onShow生命周期进行保存。
wx.login({
success: res => {
this.setData({code: res.code}) //记得在data里面定义一个code
},
fail: res => {
//失败
}
})
- 用微信官方获取手机号时间的button
<button plain="{{true}}" bindgetphonenumber="bindgetphonenumber" open-type="getPhoneNumber" >绑定手机号</button>
- 开始写获取手机号的事件
我用的是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
上一篇: 微博营销技巧分享 微博如何免费涨粉?
下一篇: 小郡肝怎么腌制才会脆