springboot接入支付宝app支付总结

本文详细介绍SpringBoot框架集成支付宝APP支付的步骤,包括配置、参数申请、代码实现及回调处理,助您快速掌握APP支付集成技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要讲解楼主在使用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

### Spring Boot集成支付宝支付功能实现指南 #### 1. 添加依赖项 为了使Spring Boot应用程序能够处理支付宝支付请求,需在`pom.xml`文件中引入必要的依赖库。通常情况下,这涉及到阿里巴巴官方提供的SDK。 ```xml <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>LATEST_VERSION</version> </dependency> ``` 注意替换`LATEST_VERSION`为实际发布的最新版本号[^1]。 #### 2. 配置应用属性 编辑项目的`application.yml`或`application.properties`来定义与支付宝交互所需的关键参数,比如商户ID(app_id),私钥(private_key), 支付宝公钥(alipay_public_key)等安全凭证信息: ```yaml alipay: app-id: YOUR_APP_ID private-key: YOUR_PRIVATE_KEY public-key: ALIPAY_PUBLIC_KEY gateway-url: https://openapi.alipay.com/gateway.do charset: UTF-8 sign-type: RSA2 ``` 上述配置中的字段应根据实际情况填写相应的值。 #### 3. 创建服务类 创建一个新的Java类用于封装调用支付宝API的方法逻辑。此类可以命名为`AlipayService.java`,并在此内部编写具体业务流程代码,如发起支付请求、查询订单状态等功能模块。 ```java @Service public class AlipayService { @Value("${alipay.app-id}") private String appId; // ...其他成员变量... /** * 构建支付请求对象. */ public AlipayTradePagePayRequest buildPaymentRequest(Order order){ AlipayClient client = new DefaultAlipayClient( "https://openapi.alipay.com/gateway.do", appId, privateKey, "json", "UTF-8", publicKey, "RSA2"); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); JSONObject bizContent = new JSONObject(); bizContent.put("out_trade_no", order.getOrderId()); bizContent.put("total_amount", order.getTotalAmount()); bizContent.put("subject", "商品描述"); request.setBizContent(bizContent.toJSONString()); return request; } } ``` 此部分展示了如何通过构建`AlipayClient`实例以及设置交易详情(`biz_content`)的方式向支付宝发送页面支付指令。 #### 4. 控制器层接口设计 最后,在控制器(Controller)层面暴露RESTful API端点供前端或其他系统调用来触发支付操作。这里假设有一个名为`OrderController.java`的控制类负责接收HTTP POST请求并将之转发给之前提到的服务组件完成后续工作流。 ```java @RestController @RequestMapping("/orders") public class OrderController { @Autowired private AlipayService alipayService; @PostMapping("/{id}/pay") public ResponseEntity<String> pay(@PathVariable Long id, HttpServletRequest req) throws Exception{ Optional<Order> optionalOrder = orderRepository.findById(id); if (!optionalOrder.isPresent()) { throw new ResourceNotFoundException("找不到指定编号的订单!"); } Order order = optionalOrder.get(); AlipayTradePagePayResponse response = alipayService.buildPaymentRequest(order).pageExecute(client); if(response.isSuccess()){ return ResponseEntity.ok().body(response.getBody()); }else{ log.error("支付失败:" + response.getSubMsg()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } } ``` 这段代码片段说明了当接收到带有特定路径模式(`/orders/{id}/pay`) 的POST请求时,会尝试获取对应ID下的订单记录,并利用前面定义好的`AlipayService`来进行在线付款过程;成功则返回HTML表单字符串以便重定向至网银界面让用户确认支付细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值