微信小程序开发偶发性获取手机号失败解决方案

发布时间:2022-08-12 09:41:08 作者:King 来源:本站 浏览量(2053) 点赞(63)
摘要:概要在微信小程序开发中,获取用户信息,获取手机号基本是必须用到的功能但是在有些时候会遇到小程序解密失败的问题,这多数是因为前端这边登录流程出的问题会出错的流程:前端多数是把open-data的获取加密信息按钮做成登录按钮,然后点击的时候用wx.login获取code,成功后将加密信息和code传到后端直接调用解密手机号的接口

概要

在微信小程序开发中,获取用户信息,获取手机号基本是必须用到的功能

但是在有些时候会遇到小程序解密失败的问题,这多数是因为前端这边登录流程出的问题

会出错的流程:前端多数是把open-data的获取加密信息按钮做成登录按钮,然后点击的时候用wx.login获取code,成功后将加密信息和code传到后端直接调用解密手机号的接口,这样session_key可能没来得及刷新,从而导致解密失败,但是第二次解密一定会成功的现象


微信小程序开发偶发性获取手机号失败解决方案


原因分析

出错的原因:在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。

解决方案:建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

解决案例

所有解决办法是提前调wx.login,在获取手机号的回调方法中取检验登录状态,代码如下:

onLoad: function (options) {
  //先登录提前保存code
  wx.login({
    success: res => {
      that.setData({
        code: res.code
      })
    }
  })
},
getPhoneNumber(e) {
  //触发获取手机号加密信息
  let that = this,
  encryptedData = e.detail.encryptedData,
  iv = e.detail.iv;
  wx.checkSession({
    success() {
      //session_key 未过期,并且在本生命周期一直有效(这里面可以不写代码)
    },
    fail() {
      // session_key 已经失效,需要重新执行登录流程并更新code
      wx.login({
        success: res => {
          code = res.code
          that.setData({
            code: code
          })
        }
      })
    },
    complete() {
      //将code,encryptedData,iv传给后台进行解密
    }
  })
}


微信

扫一扫,关注我们

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

【如有开发需求】那就联系我们吧

搜索千万次不如咨询1次

承接:网站建设,手机网站,响应式网站,小程序开发,原生android开发等业务

立即咨询 16605125102