/**
* 解密支付宝步数
* @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);
}
java-解密支付宝小程序运动步数
猜你喜欢
转载自blog.csdn.net/gelinwangzi_juge/article/details/124987857
今日推荐
周排行