很多朋友在微信授权的时候会遇到首次授权失败,二次授权才可以成功的情况。这种请款的出现应该是授权是获取的code的获取顺序出错了。
下面我们看下小编的一个正确和错误的写法
1、正确顺序:先wx.login拿到code,再执行getPhoneNumber的方法调起授权
2、错误的方法:先getPhoneNumber的方法调起授权再通过wx.login获取code
下面是代码示范:
错误的示范:
getPhoneNumber (e) {
if (e.detail.errMsg === 'getPhoneNumber:ok') {
wx.login({
success(rs) {
if (rs.code) {
LoginTokenApi({// LoginTokenApi 后台接口请求的方法 自己封装的
code: rs.code,
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
source: 0
})
.then(res => {
console.log('-----------授权登录成功-----------------------', res)
if (res && +res.code === HttpStatus.SUCCESS) {
// HttpStatus.SUCCESS 自己封装的后台接口请求成功的code,200或200000
setLocalData(res)
} else {
showToast(res.message)
}
})
.catch(err => {
console.log('-------登陆失败------', err)
})
}
}
})
} else {
showToast('授权登录失败')
}
console.log('授权登录')
}
正确代码:
// 在 onload 或onshow方法中先执行
wx.login({
success: rs => {
if (rs.code) {
setLoginCode(rs.code)
}
}
})
// 再 点击调起
getPhoneNumber (e) {
if (e.detail.errMsg === 'getPhoneNumber:ok') {
LoginTokenApi({ // LoginTokenApi 后台接口请求的方法
code: loginCode,
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
source: 0
})
.then(res => {
console.log('-----------授权登录成功-----------------------', res)
if (res && +res.code === HttpStatus.SUCCESS) {
// HttpStatus.SUCCESS 自己封装的后台接口请求成功的code,200或20000
setLocalData(res)
} else {
showToast(res.message)
}
})
.catch(err => {
console.log('-------登陆失败------', err)
})
} else {
showToast('授权登录失败')
}
}