/**
* 解密支付宝步数
* @param aliChatStepDto 解密支付宝步数的参数对象
* @return 用户当前的支付宝步数
*/
@Transactional(rollbackFor = Exception.class)
public ResultData<Object> decodeAliChatStep(AliChatStepDto aliChatStepDto) {
// 前端传过来的密文(一个json字符串,里面有两个属性,一个response,一个sign)
String response = aliChatStepDto.getEncryptedData();
//1. 获取验签和解密所需要的参数
Map<String, String> openapiResult = JSON.parseObject(response, new TypeReference<Map<String, String>>() {}, Feature.OrderedField);
String signType = "RSA2";
String charset = "UTF-8";
String encryptType = "AES";
String sign = openapiResult.get("sign");
String content = openapiResult.get("response");
//判断是否为加密内容
boolean isDataEncrypted = !content.startsWith("{");
boolean signCheckPass = false;
//2. 验签
String signContent = content;
//如果是加密的报文则需要在密文的前后添加双引号
if (isDataEncrypted) {
signContent = "\"" + signContent + "\"";
} try {
// signVeriKey 支付宝公钥
signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);
} catch (AlipayApiException e) {
logger.info("验签异常");
return ResultData.error("验签异常");
} if (!signCheckPass) {
logger.info("验签失败");
return ResultData.error("验签失败");
}
//3. 解密
String plainData = null;
if (isDataEncrypted) {
try {
//decryptKey AES秘钥
plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);
} catch (AlipayApiException e) {
logger.info("解密异常");
return ResultData.error("解密异常");
}
} else {
plainData = content;
}
logger.info("解密支付宝密文后的数据:"+plainData);
// 解析明文为json格式
Double step = 0.0;
JSONObject jsonObject = JSONObject.parseObject(plainData);
if(!jsonObject.isEmpty() && "10000".equals(jsonObject.getString("code"))){
step = Convert.toDouble(jsonObject.getString("count"));
}
return ResultData.ok("获取支付宝步数成功!", step);
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137472.html