返回

小程序授权手机号失败?如何一招解决“请重新授权手机号”!

前端

在小程序开发中,授权手机号是用户注册、登录、支付等场景的常见操作。然而,有时你会遇到这样的问题:用户在授权手机号后,却提示“请重新授权手机号”。这让人十分抓狂!

别担心,这不是你的错。本文将深入分析这个问题的根源,并提供一劳永逸的解决方案,让你不再为此烦恼。

问题根源

当你调用wx.login获取code后,服务器需要使用该code换取sessionKey,才能成功解密用户手机号。但是,如果在获取code后执行了某些操作,如刷新登录态,就会导致服务器使用的sessionKey与加密时使用的sessionKey不一致,从而导致解密失败,弹出“请重新授权手机号”的提示。

解决方法

要解决这个问题,我们需要确保服务器使用的sessionKey与加密时使用的sessionKey一致。具体步骤如下:

  1. 在小程序中,使用wx.login获取code
  2. code发送给服务器,以换取sessionKey
  3. 重点来了:在获取sessionKey之前,请勿执行任何可能刷新登录态的操作,如使用wx.checkSession()或清除wx.getStorageSync('sessionKey')
  4. 使用服务器获取的sessionKey解密用户手机号。

示例代码

// 在小程序中
wx.login({
  success: function (res) {
    const code = res.code;
    // 将 code 发送给服务器以换取 sessionKey
  }
});

// 在服务器中
const requestBody = {
  code: code
};

fetch('https://api.example.com/auth/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(requestBody)
})
.then(res => res.json())
.then(data => {
  // 获取 sessionKey
  const sessionKey = data.sessionKey;
  // 使用 sessionKey 解密用户手机号
});

结论

通过以上步骤,你可以解决小程序授权手机号失败的问题,避免“请重新授权手机号”的提示。只要注意在获取sessionKey之前不刷新登录态,你就可以顺畅地完成用户手机号授权。

如果你遇到其他小程序开发问题,欢迎留言咨询。我会继续分享更多小程序开发技巧,助你开发出更好的小程序。