坑1 - 深坑:
背景:微信小程序,通过Cipher类解密RowData获取unionId。通过手动测试,单测获取获取,但是联机获取报错 “javax.crypto.BadPaddingException: pad block corrupted”。
原因:
wx.getUserInfo() 需要在 wx.login() 执行之后调用,否则会引发session_key与加密数据不一致的问题。
// 修正后的代码段
var config = require("../../utils/config.js")
config = config.config
var comFun = require("../../utils/comFun.js")
comFun = comFun.comFun
var app = getApp();
Page({
data: {},
onGetUserinfo: function (e) {
console.log(e);
var errMsg = e.detail.errMsg;
var userInfo = e.detail
// 如果用户拒绝授权
if (errMsg == "getUserInfo:fail auth deny") {
// 弹出对话框
comFun.popWarnMessage(
'授权拒绝,请进入登录页面,重新执行登录操作',
function (res) {
console.log(res);
if (res.confirm) {
console.log('用户点击主操作')
} else {
console.log('异常,用户点击辅助操作')
}
}
);
} else {
// 用户授权通过
wx.login({
success: function (res) {
console.log(res);
// 登录成功
if (res.errMsg == "login:ok") {
wx.getUserInfo({
success: function(resUserInfo) {
console.log(resUserInfo)
var userInfo = resUserInfo
var params = {
code: res.code, // 登录code
encryptedData: userInfo.encryptedData, // 用户信息的加密数据
iv: userInfo.iv
}
var option = {
transid: "A16280301", // 获取用户隐私信息
data: params,
succ: function (data) {
console.log(data);
},
fail: function (data) {
}
}
// 外呼获取加密数据openid 和 sessionkey 及其相关的 trdSessionKey
comFun.utils.request(option)
},
fail: function(res) {
}
})
} else {
// 异常处理
comFun.popErrorMessage(
"出现异常:用户授权通过,但wx.login失败"
)
}
}
})
}
}
})