@341 同样遇到这个错误,分享自己的解决方法,问题不在于解密的方法而是流程: 1,第一次用wx.login 得到临时令牌再换取session_key 2,下次调用wx.login方法之前需要用wx.checksession方法,如果是ok,那么第一步的session_key任然有效,可以解密用户信息和手机号码。如果是fail,则代表session_key在微信服务器上失效,需要重新用wx.login方法获取新的临时令牌换取新的session_key 我和楼主用的方式是一样的 每次小程序都会给一个code session_key每次都是最新的不会出现无效
解密用户信息报错pad block corrupted解密用户信息报错,如下: 前端: [代码] [代码][代码]wx.login({[代码] [代码] [代码][代码]success: [代码][代码]function[代码] [代码](loginResp) {[代码][代码] [代码][代码]if[代码] [代码](loginResp.code) {[代码][代码] [代码][代码]//获取用户信息[代码][代码] [代码][代码]wx.getUserInfo({[代码][代码] [代码][代码]withCredentials: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]//封装登陆需要的参数[代码][代码] [代码][代码]var[代码] [代码]params = {};[代码][代码] [代码][代码]params.code = loginResp.code;[代码][代码] [代码][代码]params.encryptedData = res.encryptedData;[代码][代码] [代码][代码]params.iv = res.iv;[代码][代码] [代码][代码]//调用登陆接口[代码][代码] [代码][代码]that.sendRequest({[代码][代码] [代码][代码]url: [代码][代码]'/login'[代码][代码],[代码][代码] [代码][代码]data: params,[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] //cache userInfo...[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail: [代码][代码]function[代码] [代码](e) {[代码][代码] [代码][代码]console.log(e);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]console.log([代码][代码]'获取用户登录态失败!'[代码] [代码]+ res.errMsg)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码] 后台步骤: 1) 跟据code换取用户session_key 拼接url参数:https://api.weixin.qq.com/sns/jscode2session?appid=xxx&secret=xxxx&js_code=xxxx&grant_type=authorization_code 请求方式:http get 返回结果: {"session_key":"xxxxxxxx","openid":"xxxxxxxxxx"} 2) 使用解密工具类解密出明文,使用:AES/CBC/PKCS7Padding AES方式解密 参数:encryptedData、sessionKey、iv 结果: javax.crypto.BadPaddingException: pad block corrupted 但是紧接着第二次再走以上流程是可以正常解出明文用户信息的 过会再走以上流程第一次请求又是报这个错误
2019-01-22