微信小程序 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错误的主要内容,如果未能解决你的问题,请参考以下文章