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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序 php解密获取手机号 + -41003错误相关的知识,希望对你有一定的参考价值。

参考技术A 此处需要注意的是,很多人解密的时候会报-41003
这是因为传过来的encryptedData的值有问题,
一定要在小程序端使用encodeURIComponent()进行数据编码后再传,
不然+号会变成空格,然后一直解密不成功......

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

微信小程序解密手机号

记录一下微信小程序手机号解密报错: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 微信小程序获取手机号并解密

微信小程序手机号解密

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

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

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

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