springboot接入支付宝app支付总结

本文主要讲解楼主在使用spingboot框架对接支付宝app时需要做到几个步骤,以及防坑指南。

app支付

1.app支付的文档及其配置,附上链接
https://docs.open.alipay.com/204/105465
app支付需要的参数,需要先去支付宝进行申请,主要为下面这几个
在这里插入图片描述
对于应用的公钥和私钥支付宝提供了工具可以生产
在这里插入图片描述这里的app公钥我们用来给支付宝,然后上传应用公钥并获取支付宝公钥,这样就ok了。

2.yml中配置支付宝请求参数
在这里插入图片描述notify-url 支付宝支付成功回调的地址,所以必须是外网可以访问的地址,内部本质也就是一个接口,用来处理回调的成功后的业务逻辑,其次一定要去除接口的系统权限,楼主死活回调不成功,因为url被权限拦截了
在这里插入图片描述
3.写好支付宝配置类,通过配置类加载支付的共用参数,这里需要引入支付宝的pom依赖

<dependency>
 <groupId>com.alipay.sdk</groupId>
 <artifactId>alipay-sdk-java</artifactId>
 <version>3.7.110.ALL</version>
</dependency>

配置类如下

public class AlipayConfig {
    /**
     * 支付宝gatewayUrl
     */
    @Value("${alipay.gatewayUrl}")
    private String gatewayUrl;
    /**
     * 商户应用id
     */
    @Value("${alipay.appid}")
    private String appid;
    /**
     * RSA私钥,用于对商户请求报文加签
     */
    @Value("${alipay.private-key}")
    private String appPrivateKey;
    /**
     * 支付宝RSA公钥,用于验签支付宝应答
     */
    @Value("${alipay.public-key}")
    private String alipayPublicKey;
    /**
     * 签名类型
     */
    private String signType = "RSA2";
    /**
     * 格式
     */
    private String formate = "json";
    /**
     * 编码
     */
    private String charset = "UTF-8";
    /**
     * 同步地址
     */
    private String returnUrl;
    /**
     * 异步地址
     */
    @Value("${alipay.notify-url}")
    private String notifyUrl;
    /**
     * 最大查询次数
     */
    private static int maxQueryRetry = 5;
    /**
     * 查询间隔(毫秒)
     */
    private static long queryDuration = 5000;
    /**
     * 最大撤销次数
     */
    private static int maxCancelRetry = 3;
    /**
     * 撤销间隔(毫秒)
     */
    private static long cancelDuration = 3000;

    @Bean
    public AlipayClient alipayClient(){
        return new DefaultAlipayClient(this.getGatewayUrl(),
                this.getAppid(),
                this.getAppPrivateKey(),
                this.getFormate(),
                this.getCharset(),
                this.getAlipayPublicKey(),
                this.getSignType());
    }
}

4.支付代码
在这里插入图片描述
这里注意几点
1.AlipayTradeAppPayModel这个对象是支付宝提供的,需引入步骤3中的pom依赖,和这个对象类似的还有退款对象等,都是不同的对象,用来封装业务特有参数。
2.支付宝支付单位为元,微信是分,所以业务中我们需要根据实际情况转换。
3.AlipayClient为支付宝封装的网络请求对象,支付直接返回body给前端即可,已经加密过。

成功后的body签名参数如图:
在这里插入图片描述

很多时候我们好奇回调方法中的参数,这里也给到了实例,如下图:
详细参数见支付宝异步回调说明,链接如下
https://docs.open.alipay.com/204/105301/
在这里插入图片描述

app退款

1.退款接口文档位置及其参数
https://docs.open.alipay.com/api_1/alipay.trade.refund

2.请求参数注意事项
在这里插入图片描述上图公共参数这里不做过多解释,支付已经封装进了alipayConfig中
在这里插入图片描述
注意以下几点
1.out_trade_no和trade_no必须选一个作为请求依据,要么是商户自己的定单号,要么就是支付宝的支付返回的单号
2.out_request_no这个字段如果退款是分批退款,必须传递,并且需要每次不一样,最好使用随机串

退款代码部分如下
在这里插入图片描述
请求成功的对象如下
在这里插入图片描述
其中的body格式化后如下:
在这里插入图片描述

这里不在介绍查询下单,查询退款等接口,基本上和上述接口调用一致,想要复制代码的话,可以移步下面这篇文章
https://www.cnblogs.com/apes-book/p/11404290.html

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值