微信小程序解密手机号(欢迎指点留言)

Posted 天界程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序解密手机号(欢迎指点留言)相关的知识,希望对你有一定的参考价值。

微信小程序解密手机号

记录一下微信小程序手机号解密报错:pad block corrupted 解决方法

1、在onload方法里面获取最初的code

// 1、在onload方法里面获取最初的code
onload: function(){
    var _that = this;
    wx.login({
        success: res => {
        _that.setData({
          code: res.code
        });
      }
    });
}

2、用户点击授权按钮获取手机号加密信息并解密

<!-- 2、获取手机号按钮 -->
<view class="g-phone-but">
    <button open-type="getPhoneNumber" bindgetphonenumber="handleGetPhone">授权手机号</button>
</view>

3、使用wx.checkSession检查session_key是否过期

// 3、使用wx.checkSession检查session_key是否过期
  handleGetPhone(e) {
    var that = this;
    wx.checkSession({
      success: res => {
        console.log("session_key 未过期,并且在本生命周期一直有效", res)
        if (wx.getStorageSync("sessionKey")) {
          that.reloadPhone(e, wx.getStorageSync("sessionKey"))
        } else {
            // 虽然sessionkey未过期,但是可能存在本地缓存的sessionkey为空的情况
          wx.login({
            success: res => {
              that.setData({
                code: res.code
              })
                // 获取新的code,让后端返回一个新的sessionkey解密手机号
              that.reloadPhone(e, undefined)
            },
          })
        }
       
      },
      fail: err => {
        console.log("session_key 已经失效,需要重新执行授权手机号流程", err)
        wx.login({
          success: res => {
            that.setData({
              code: res.code
            })
              // 获取新的code,让后端返回一个新的sessionkey解密手机号
            that.reloadPhone(e, undefined)
          },

        })
      }
    });
  },

4、获取解密后的手机号

// 4、获取解密后的手机号
reloadPhone(e, sKey) {
    //将code,encryptedData,iv传给后台进行解密
    var that = this;
    wx.request({
      url: that.data.onlineHttpApiUrl + '/wx/connApi',
      data: {
          // 将小程序的APPID和code,传给后台获取openID和session_key,但是这里只需要session_key
        url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + that.data.appidStr + '&js_code=' + 				that.data.code + '&grant_type=authorization_code',
      },
      method: "POST",
      header: {
        "Content-Type": "application/json;charset=UTF-8",
      },
      success: function (res) {

        if (!sKey) {
          // 如果sKey是undefined,则将接口获取的sessionkey存储在本地缓存
          wx.setStorageSync("sessionKey", res.data.data.session_key);
        }
        
          // 如果用户允许授权获取手机号加密信息时
        if (e.detail.iv != undefined) {
            // 将sessionkey、iv、encrypteddata发送给后台解密手机号
          wx.request({
            url: that.data.onlineHttpApiUrl + '/wx_config/phone_num',
            data: {
              sessionkey: sKey ? sKey : res.data.data.session_key,
              iv: e.detail.iv,
              encrypteddata: e.detail.encryptedData
            },
            header: {
              'content-type': 'application/json;charset=UTF-8' // 默认值
            },
            method: 'POST',
            success: function (reses) {

              if (reses.data.data) {
                wx.setStorageSync("phoneNumber", reses.data.data.purePhoneNumber);
                that.setData({
                  modalNames: null, // 这里关闭获取手机号的弹窗
                  modalNamescx: null,// 这里关闭重新获取手机号的弹窗
                  'userInfo.telephone': reses.data.data.purePhoneNumber // 将解密的手机号赋值给用户信息对象里面
                });

              } else {
				// 如果后台解密失败,将sessionkey清空
                wx.setStorageSync("sessionKey", null);
                wx.login({
                  success: res => {
                    that.setData({
                      code: res.code, // 重新获取code
                      modalNamescx:'true' // 打开重新获取手机号的弹窗让用户重新授权,调用handleGetPhone(e)方法
                    })
                  },

                })
              }
            },
            fail: function () {
              wx.showToast({
                title: '网络异常',
                icon: 'none',
                duration: 2000,
                mask: true
              })
            }
          })

        } else {
          wx.showToast({
            title: '授权手机号才可进行后续操作!',
            icon: 'none',
            duration: 2000,
            mask: true
          })
        }
      }
    });
  },

以上是关于微信小程序解密手机号(欢迎指点留言)的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序解密手机号(欢迎指点留言)

微信小程序手机号解密

微信小程序 php解密获取手机号 + -41003错误

uni-app 微信小程序获取手机号并解密

微信小程序前端解密获取手机号

php 微信小程序获取手机号, 服务器端解密有时成功,有时-41001,这是为啥