这个错误提示意味着你使用了不正确的 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 })
  })
})
``
获取微信手机号报错invalid oauth code it is miniprogram jscode please use jscode2session

原文地址: https://www.cveoy.top/t/topic/gsO0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录