String requestStr = AuthenticationInterceptor.getBodyString(request);
requestStr = URLDecoder.decode(requestStr, "UTF-8");
// 在此处打断点, 查看支付宝返回的参数是不是乱码.
// 如果不是乱码, 只需要遍历数据到map中,
// 如果是乱码, 添加paramsMap.put(key, new String(value.getBytes("ISO-8859-1"),
String[] params = requestStr.split("&");
Map<String, String> paramsMap = new HashMap<>(50);
for (String param : params) {
try {
String key = param.substring(0, param.indexOf("="));
String value = param.substring(param.indexOf("=") + 1, param.length());
// paramsMap.put(key, new String(value.getBytes("ISO-8859-1"), "utf-8"));
paramsMap.put(key, value);
} catch (Exception e) {
e.printStackTrace();
}
}
try {
if (paramsMap.get("trade_status").equals("TRADE_SUCCESS")) {
//systemPayService.orderStateAli(paramsMap);
// 校验签名是否正确
boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, AliPayConfig.getAliPublicKey(),
AlipayConstants.CHARSET_UTF8, AliPayConfig.SIGN_TYPE);
if (signVerified) {
//按照支付结果异步通知中的描述,对支付结果中的业务内容进行1\2\3\4二次校验,校验成功后在response中返回success,校验失败返回failure
systemPayService.orderStateAli(paramsMap);
}
}
} catch (Exception e) {
e.printStackTrace();
}
另外需要注意:
- 选择加密的方式要和你请求支付接口的加密方式一样
2.AliPayConfig.getAliPublicKey()这个是支付宝的公钥不是应用公钥
网友评论