对于手机网站支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果作为参数通知到商户系统。
支付宝开发文档:https://docs.open.alipay.com/203/105286/
这边博客讲的1.8后台通知支付结果 notify_url
image.png
这个环节的业务逻辑处理为:收到支付宝的回调结果通知,先进行签名校验,如果签名校验结果是对的,然后进行自己的业务逻辑处理(比如辑比如更新订单支付信息成功,保存交易流水,修改订单状态);
当然支付宝的官方文档还推荐在验签通过之后还需要查询这个支付单号在支付宝服务器的支付结果是否为成功,以这个结果为准;然后再进行支付成功后的业务逻辑处理。主要是为了防止数据篡改和数据的幂等性处理。
项目中的具体代码实现:
controller层的处理:
/**
* @param request:
* @param response:
* @return java.lang.String
* @Description 支付宝回调
* @Author huangkeyuan
* @Date 16:24 2019-12-11
*/
@PostMapping("notify")
@ApiOperation("支付宝支付回调,修改订单支付状态")
public String aliPayCertNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
Map returnMap = new HashMap<>();
//获取支付宝POST过来反馈信息转换为Entry
Set> entries = request.getParameterMap().entrySet();
// 遍历
for (Map.Entry entry : entries) {
String key = entry.getKey();
StringBuffer value = new StringBuffer("");
String[] val = entry.getValue();
if (n