获取微信手机号报错invalid oauth code it is miniprogram jscode please use jscode2session
这个错误提示意味着你使用了不正确的 OAuth code 来获取用户的手机号。如果你的小程序是通过 JS-SDK 授权获取用户信息的,那么应该使用 jscode2session 接口来获取用户的手机号。
你需要在小程序前端使用 wx.login() 方法获取到 code,然后将 code 传给后端,后端再通过 jscode2session 接口获取用户的 openid 和 session_key。最后前端再通过 wx.getUserInfo() 方法获取用户信息,并且在获取用户信息时传入上一步获取到的 session_key 来解密用户的手机号。
以下是示例代码,仅供参考:
前端代码:
wx.login({
success: function (res) {
if (res.code) {
wx.getUserInfo({
withCredentials: true,
success: function (res) {
// 解密用户信息获取手机号
wx.request({
url: 'http://example.com/getPhoneNumber',
data: {
encryptedData: res.encryptedData,
iv: res.iv,
code: res.code
},
success: function (res) {
console.log(res.data.phoneNumber)
}
})
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
})
后端代码:
const request = require('request')
app.post('/getPhoneNumber', (req, res) => {
const { encryptedData, iv, code } = req.body
const appId = 'your_appId'
const appSecret = 'your_appSecret'
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`
request(url, (error, response, body) => {
const { openid, session_key } = JSON.parse(body)
const CryptoJS = require('crypto-js')
const decryptedData = CryptoJS.AES.decrypt(encryptedData, session_key, { iv: iv })
const phoneNumber = JSON.parse(decryptedData.toString(CryptoJS.enc.Utf8)).phoneNumber
res.json({ phoneNumber })
})
})
``
原文地址: https://www.cveoy.top/t/topic/gsO0 著作权归作者所有。请勿转载和采集!