随着移动支付的普及,支付宝作为国内领先的第三方支付平台,被广泛应用于各类线上线下场景。本文将详细介绍如何在 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&amount=100,跳转到支付宝支付页面。
- 完成支付后,支付宝会跳转到同步跳转地址 http://localhost:8080/pay/success,并发送异步通知到 http://localhost:8080/pay/callback。
通过以上步骤,就可以在 Spring Boot 项目中整合支付宝,实现支付功能。