【支付宝对接】使用java对接支付宝,完成订单付款操作

1、natapp注册安装

对接之前需要先申请natapphttps://natapp.cn内网穿透,方便本地调试效果。
我这边是购买了一个月的通道费(免费也可以,但是地址总是变化)
在这里插入图片描述
在这里插入图片描述

2、配置natapp

在这里插入图片描述
在这里插入图片描述

3、支付宝沙箱环境申请

申请沙箱

进入https://open.alipay.com/develop/sandbox/app控制台,

在这里插入图片描述

下载密钥生成客户端

在这里插入图片描述

生成密钥

在这里插入图片描述

保留好公钥和私钥

在这里插入图片描述

搭建工程

配置支付宝公钥信息

alipay:
  # 支付宝公钥
  alipay_public_key: xxx

编写支付宝支付回调接口

@Slf4j
@RestController
@CrossOrigin("*")
@RequestMapping("/api/v1/alipay/")
public class AliPayController {

    @Value("${alipay.alipay_public_key}")
    private String alipayPublicKey;

    @RequestMapping(value = "alipay_notify_url", method = RequestMethod.POST)
    public String aliPayNotify(HttpServletRequest request) throws AlipayApiException {
        log.info("支付宝支付消息回调,消息接收 {}", request.getParameter("trade_status"));

        if (!"TRADE_SUCCESS".equals(request.getParameter("trade_status"))) {
            return "false";
        }

        Map<String, String> params = new HashMap<>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (String name : requestParams.keySet()) {
            params.put(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) {
            return "false";
        }

        // 验签通过
        log.info("支付回调信息:{}",JSON.toJSONString(params) );


        return "success";
    }

}
测试用例

@Slf4j
public class AliPayTest {

    // 应用ID 
    public static String app_id = "szzz";
    //商户私钥
    public static String merchant_private_key = "xxx";
    // 商户公钥
    public static String alipay_public_key = "xxx";
    //服务器异步通知回调地址
    public static String notify_url = "http://xxxxx.natapp1.cc/api/v1/alipay/alipay_notify_url";
    // 支付成功回调地址,必须外网可以正常访问
    public static String return_url = "https://blog.youkuaiyun.com/weixin_46522411/article/details/145901139";
    // 沙箱环境
    public static String gatewayUrl = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
    // 签名方式
    public static String sign_type = "RSA2";
    public static String charset = "utf-8";

    private AlipayClient alipayClient;

    @Before
    public void init() {
        this.alipayClient = new DefaultAlipayClient(gatewayUrl,
                app_id,
                merchant_private_key,
                "json",
                charset,
                alipay_public_key,
                sign_type);
    }

    @Test
    public void test_aliPay_pageExecute() throws AlipayApiException {
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setNotifyUrl(notify_url);
        request.setReturnUrl(return_url);

        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", "test2025022700000000");
        bizContent.put("total_amount", "100");
        bizContent.put("subject", "测试商品");//商品名称
        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
        request.setBizContent(bizContent.toString());

        String html = alipayClient.pageExecute(request).getBody();
        log.info("支付宝返回index.html:{}", html);

    }
}
付款页面

测试方法执行成功之后,会返回一个html的字符串,把对应字符串使用浏览器打开即可得到如下页面
在这里插入图片描述

之后 进入支付宝控制台,找到【沙箱账号】

在这里插入图片描述

在html页面输入购方账号信息,结算,输入交易密码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

之后,会自动跳转到回调页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还算善良_

如果对你的工作有所帮助,拜托啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值