2024-01-24 09:22

支付宝沙箱支付-支付完成回调

码自答

JavaEE

(491)

(0)

收藏

之前我们聊到了支付宝沙箱支付(https://www.wanmait.com/note/abner/javaee/5c0307add29c486a9c9e91ac423c5d8d.html)

支付完成之后,需要返回支付是否成功,支付宝如果支付成功,通过回调方法来实现消息返回

支付宝回调的路径不能是局域网路径,只能是公网访问的路径,在开发阶段,可以进行内网穿透,将局域网的服务器,变成可以通过公网访问的路径

内网穿透(https://www.wanmait.com/note/abner/server/44cd499ef46d4d36ab00faef256fc598.html)


1  支付回调方法

    注意:支付回调的方法,必须是POST方式访问的方法

    image.png


2 设置支付完成,调用回调方法

    image.png

        注意路径是内网穿透的路径


    代码:

@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条评论

点击登录参与评论