之前我们聊到了支付宝沙箱支付(https://www.wanmait.com/note/abner/javaee/5c0307add29c486a9c9e91ac423c5d8d.html)
支付完成之后,需要返回支付是否成功,支付宝如果支付成功,通过回调方法来实现消息返回
支付宝回调的路径不能是局域网路径,只能是公网访问的路径,在开发阶段,可以进行内网穿透,将局域网的服务器,变成可以通过公网访问的路径
内网穿透(https://www.wanmait.com/note/abner/server/44cd499ef46d4d36ab00faef256fc598.html)
1 支付回调方法
注意:支付回调的方法,必须是POST方式访问的方法
2 设置支付完成,调用回调方法
注意路径是内网穿透的路径
代码:
@PostMapping("notify") public String payNotify(HttpServletRequest request) throws AlipayApiException { if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) { System.out.println("=========支付宝异步回调========"); Map<String, String> params = new HashMap<>(); Map<String, String[]> requestParams = request.getParameterMap(); for (String name : requestParams.keySet()) { params.put(name, request.getParameter(name)); // System.out.println(name + " = " + request.getParameter(name)); } String tradeNo = params.get("out_trade_no"); String gmtPayment = params.get("gmt_payment"); String alipayTradeNo = params.get("trade_no"); String sign = params.get("sign"); String content = AlipaySignature.getSignCheckContentV1(params); boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, alipayPublicKey, "UTF-8"); // 验证签名 // 支付宝验签 if (checkSignature) { // 验签通过 System.out.println("交易名称: " + params.get("subject")); System.out.println("交易状态: " + params.get("trade_status")); System.out.println("支付宝交易凭证号: " + params.get("trade_no")); System.out.println("商户订单号: " + params.get("out_trade_no")); System.out.println("交易金额: " + params.get("total_amount")); System.out.println("买家在支付宝唯一id: " + params.get("buyer_id")); System.out.println("买家付款时间: " + params.get("gmt_payment")); System.out.println("买家付款金额: " + params.get("buyer_pay_amount")); } } return "success"; }
0条评论
点击登录参与评论