通过微信开源封装weixin-java-miniapp解密手机号出现:me.chanjar.weixin.common.error.WxRuntimeException: AES解密失败!
通过微信开源封装weixin-java-miniapp解密手机号出现:me.chanjar.weixin.common.error.WxRuntimeException: AES解密失败!
·
通过微信开源封装weixin-java-miniapp解密手机号出现:me.chanjar.weixin.common.error.WxRuntimeException: AES解密失败! 特此记录
1. 环境 :jdk1.8
2. 依赖
<!--微信开源封装sdk-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.1.0</version>
</dependency>
3. controller层接口实现
@ApiOperation(value = "小程序用户登录接口")
@PostMapping(value = "/login")
public Result login(@ApiIgnore @RequestParam Map<String, String> parameters) {
return wxService.login(parameters);
}
4. 小程序登录实现
String code = parameters.get("code");
String encryptedData = parameters.get("encryptedData");
String iv = parameters.get("iv");
// 通过code获取sessionInfo
WxMaJscode2SessionResult sessionInfo = null;
try {
sessionInfo = wxMaService.getUserService().getSessionInfo(code);
} catch (WxErrorException e) {
e.printStackTrace();
}
//获取sessionKey
String sessionKey = sessionInfo.getSessionKey();
...........
// 手机号查询
WxMaPhoneNumberInfo phoneNumberInfo=wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);
............
/ 解密 encryptedData 获取用户信息
WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
5.异常问题:
me.chanjar.weixin.common.error.WxRuntimeException: AES解密失败!
6. 发现问题:
- 前端传参:http://ip:端口/api.app/v1/wx/login?code=073fOLll2c21y94kgDll2wdHjB2fOLlF&iv=ufJc0dtGYaLvKw/lwQvE8g==&encryptedData=7Kt4S3skEyeNXvmeQgoXtofCGmNH6gzTlzt3tGbn/g2NsTzd7T8mvUI6qElxY21tt9WI6p3ju5XeOYdG46tSHL4tqHDv2Q05VVanDz7n4wO03zhydqLI8Ts+tX/UsOFMOIOP0MJKhetFs5DfsF0SG6cCjoC98UOwZcwySS2wqhfQNbdRbhCq0fQU3w21vDAbxulX2tZvTEo7yNKt+Dd30A==
- 分解参数:
code=073fOLll2c21y94kgDll2wdHjB2fOLlF
iv=ufJc0dtGYaLvKw/lwQvE8g==
encryptedData=7Kt4S3skEyeNXvmeQgoXtofCGmNH6gzTlzt3tGbn/g2NsTzd7T8mvUI6qElxY21tt9WI6p3ju5XeOYdG46tSHL4tqHDv2Q05VVanDz7n4wO03zhydqLI8Ts+tX/UsOFMOIOP0MJKhetFs5DfsF0SG6cCjoC98UOwZcwySS2wqhfQNbdRbhCq0fQU3w21vDAbxulX2tZvTEo7yNKt+Dd30A==
- 后端获取参数
code= 073fOLll2c21y94kgDll2wdHjB2fOLlF
iv=ufJc0dtGYaLvKw/lwQvE8g==
encryptedData=7Kt4S3skEyeNXvmeQgoXtofCGmNH6gzTlzt3tGbn/g2NsTzd7T8mvUI6qElxY21tt9WI6p3ju5XeOYdG46tSHL4tqHDv2Q05VVanDz7n4wO03zhydqLI8Ts tX/UsOFMOIOP0MJKhetFs5DfsF0SG6cCjoC98UOwZcwySS2wqhfQNbdRbhCq0fQU3w21vDAbxulX2tZvTEo7yNKt Dd30A==
- 参数对比得到:后端获取encryptedData参数中“+”(加号) 转换为空格,导致解密失败
问题解决:
密文串要用 json 格式传输,不能用参数拼接的方式,会把密文串的加号转换为空格,导致解密失败。
7.结束
解密成功
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)