Spring Boot 集成支付宝支付,看这篇就够了

开发 前端
随着移动支付的普及,支付宝作为国内领先的第三方支付平台,被广泛应用于各类线上线下场景。本文将详细介绍如何在 Spring Boot 项目中整合支付宝,实现支付功能。

随着移动支付的普及,支付宝作为国内领先的第三方支付平台,被广泛应用于各类线上线下场景。本文将详细介绍如何在 Spring Boot 项目中整合支付宝,实现支付功能。

一、准备工作 

  • 注册支付宝开放平台账号 :访问 支付宝开放平台 官网,注册一个开发者账号。
  • 创建应用 :登录后,在控制台创建一个新的应用,选择对应的行业类目,并提交审核。
  • 配置应用信息 :审核通过后,进入应用详情页面,配置应用的基本信息,包括应用名称、应用域名等。
  • 获取应用凭证 :在应用详情页面,可以获取到 AppId、PrivateKey 和 PublicKey,这些信息将在后续的支付流程中使用。

二、引入依赖 

在 Spring Boot 项目的 pom.xml 文件中,引入支付宝 SDK 依赖:

<properties>
    <java.version>21</java.version>
    <alipay.easysdk.version>2.2.3</alipay.easysdk.version>
</properties>

<dependencies>
    <!--支付宝支付easysdk-->
    <dependency>
        <groupId>com.alipay.sdk</groupId>
        <artifactId>alipay-easysdk</artifactId>
        <version>${alipay.easysdk.version}</version>
    </dependency>
    <!--web起步依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <!--单元测试-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

三、配置文件 

在 Spring Boot 项目的 application.yml 文件中,添加支付宝相关配置:

alipay:
  app-id: "your_app_id" # 替换为你的 AppId
  private-key: "your_private_key" # 替换为你的 PrivateKey
  public-key: "your_alipay_public_key" # 替换为你的 PublicKey
  notify-url: "https://yourdomain.com/pay/callback" # 替换为你的异步通知地址
  return-url: "https://yourdomain.com/pay/success" # 替换为你的同步跳转地址
  gateway-url: "https://openapi.alipay.com/gateway.do" # 支付宝网关地址

四、创建配置类 

创建一个 AlipayConfig 类,用于集中管理支付宝相关配置:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "alipay")
public class AlipayConfig {
    private String appId;
    private String privateKey;
    private String publicKey;
    private String notifyUrl;
    private String returnUrl;
    private String gatewayUrl;
}

五、支付接口开发 

创建一个 PayController 控制器,用于处理支付请求:

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/pay")
public class PayController {

    @Autowired
    private AlipayConfig alipayConfig;

    @GetMapping("/create")
    public String createPayment(@RequestParam String orderId, @RequestParam Double amount) {
        try {
            Factory.setOptions(Factory.createOptions()
                .setAppId(alipayConfig.getAppId())
                .setPrivateKey(alipayConfig.getPrivateKey())
                .setAlipayPublicKey(alipayConfig.getPublicKey())
                .setNotifyUrl(alipayConfig.getNotifyUrl())
                .setReturnUrl(alipayConfig.getReturnUrl()));

            AlipayTradePagePayResponse response = Factory.Payment.Page().pay(
                "商品标题",  // 商品标题
                orderId,     // 商户订单号
                String.valueOf(amount), // 金额
                alipayConfig.getReturnUrl()
            );
            return response.getBody(); // 返回支付页面
        } catch (Exception e) {
            throw new RuntimeException("支付接口调用失败", e);
        }
    }
}

六、异步通知处理 

创建一个 AlipayCallbackController 控制器,用于处理支付宝的异步通知:

import com.alipay.easysdk.factory.Factory;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@RestController
public class AlipayCallbackController {

    @PostMapping("/callback")
    public String handleCallback(HttpServletRequest request) {
        Map<String, String> params = new HashMap<>();
        request.getParameterMap().forEach((key, values) -> params.put(key, values[0]));
        try {
            boolean verified = Factory.Payment.Common().verifyNotify(params);
            if (verified) {
                // 处理订单逻辑
                String orderId = params.get("out_trade_no");
                String tradeStatus = params.get("trade_status");
                if ("TRADE_SUCCESS".equals(tradeStatus)) {
                    // 更新订单状态为已支付
                }
                return "success";
            } else {
                return "failure";
            }
        } catch (Exception e) {
            return "failure";
        }
    }
}

七、同步跳转处理 

在 AlipayCallbackController 中添加一个方法,用于处理同步跳转:

@GetMapping("/success")
public String handleReturn() {
    return "支付成功";
}

八、测试支付功能 

  • 启动 Spring Boot 项目。
  • 访问 http://localhost:8080/pay/create?orderId=123456&amp;amount=100,跳转到支付宝支付页面。
  • 完成支付后,支付宝会跳转到同步跳转地址 http://localhost:8080/pay/success,并发送异步通知到 http://localhost:8080/pay/callback。

通过以上步骤,就可以在 Spring Boot 项目中整合支付宝,实现支付功能。

责任编辑:赵宁宁 来源: Java技术营地
相关推荐

2024-02-28 08:59:47

2025-02-17 00:00:45

接口支付宝沙箱

2021-09-09 15:30:28

鸿蒙HarmonyOS应用

2024-08-27 11:00:56

单例池缓存bean

2021-01-25 14:13:26

iOS支付宝支付

2021-09-30 07:59:06

zookeeper一致性算法CAP

2019-08-16 09:41:56

UDP协议TCP

2014-11-17 10:52:56

支付宝去阿里化

2011-04-21 11:27:42

Firefox支付宝

2016-12-27 09:49:59

支付宝红包破解

2022-03-29 08:23:56

项目数据SIEM

2021-05-07 07:52:51

Java并发编程

2021-07-12 12:20:08

Spring初始化方案

2017-03-30 22:41:55

虚拟化操作系统软件

2009-09-17 12:15:28

互联网

2013-10-11 09:41:01

Windows 8.1支付宝

2009-08-26 16:07:09

支付宝网上购物安全迈克菲

2023-11-28 08:53:15

2018-03-27 12:02:31

央行支付宝红包
点赞
收藏

51CTO技术栈公众号