Spring Boot 集成支付寶支付,看這篇就夠了
隨著移動支付的普及,支付寶作為國內(nèi)領(lǐng)先的第三方支付平臺,被廣泛應(yīng)用于各類線上線下場景。本文將詳細(xì)介紹如何在 Spring Boot 項(xiàng)目中整合支付寶,實(shí)現(xiàn)支付功能。
一、準(zhǔn)備工作
- 注冊支付寶開放平臺賬號 :訪問 支付寶開放平臺 官網(wǎng),注冊一個開發(fā)者賬號。
- 創(chuàng)建應(yīng)用 :登錄后,在控制臺創(chuàng)建一個新的應(yīng)用,選擇對應(yīng)的行業(yè)類目,并提交審核。
- 配置應(yīng)用信息 :審核通過后,進(jìn)入應(yīng)用詳情頁面,配置應(yīng)用的基本信息,包括應(yīng)用名稱、應(yīng)用域名等。
- 獲取應(yīng)用憑證 :在應(yīng)用詳情頁面,可以獲取到 AppId、PrivateKey 和 PublicKey,這些信息將在后續(xù)的支付流程中使用。
二、引入依賴
在 Spring Boot 項(xiàng)目的 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 項(xiàng)目的 application.yml 文件中,添加支付寶相關(guān)配置:
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" # 替換為你的同步跳轉(zhuǎn)地址
gateway-url: "https://openapi.alipay.com/gateway.do" # 支付寶網(wǎng)關(guān)地址
四、創(chuàng)建配置類
創(chuàng)建一個 AlipayConfig 類,用于集中管理支付寶相關(guān)配置:
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;
}
五、支付接口開發(fā)
創(chuàng)建一個 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(
"商品標(biāo)題", // 商品標(biāo)題
orderId, // 商戶訂單號
String.valueOf(amount), // 金額
alipayConfig.getReturnUrl()
);
return response.getBody(); // 返回支付頁面
} catch (Exception e) {
throw new RuntimeException("支付接口調(diào)用失敗", e);
}
}
}
六、異步通知處理
創(chuàng)建一個 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)) {
// 更新訂單狀態(tài)為已支付
}
return "success";
} else {
return "failure";
}
} catch (Exception e) {
return "failure";
}
}
}
七、同步跳轉(zhuǎn)處理
在 AlipayCallbackController 中添加一個方法,用于處理同步跳轉(zhuǎn):
@GetMapping("/success")
public String handleReturn() {
return "支付成功";
}
八、測試支付功能
- 啟動 Spring Boot 項(xiàng)目。
- 訪問 http://localhost:8080/pay/create?orderId=123456&amount=100,跳轉(zhuǎn)到支付寶支付頁面。
- 完成支付后,支付寶會跳轉(zhuǎn)到同步跳轉(zhuǎn)地址 http://localhost:8080/pay/success,并發(fā)送異步通知到 http://localhost:8080/pay/callback。
通過以上步驟,就可以在 Spring Boot 項(xiàng)目中整合支付寶,實(shí)現(xiàn)支付功能。