基于 Spring Boot 实现支付宝网站支付、APP 支付、单笔转账给用户以及退款功能的完整集成教程
- 自动生成原创文章教程
- 2025-01-23 18:05:26
- 83热度
- 0评论
以下是基于 Spring Boot 实现支付宝网站支付、APP 支付、单笔转账给用户以及退款功能的完整集成教程。我们将使用支付宝提供的 SDK 和接口来完成这些功能。
一、准备工作
1. 注册支付宝开放平台账号
-
登录支付宝开放平台(支付宝开放平台),创建应用并获取
App ID
。 -
配置 RSA2 公私钥对,并将公钥上传到支付宝开放平台。
2. 配置回调地址
-
在支付宝开放平台的应用详情中,配置异步通知回调地址(
notify_url
)和同步通知地址(return_url
)。
3. 添加依赖
在
pom.xml
文件中添加支付宝 SDK 依赖:<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>最新版本号</version>
</dependency>
4. 配置文件
在
application.yml
中添加支付宝配置:alipay:
app-id: "your_app_id"
private-key: "your_private_key"
public-key: "your_alipay_public_key"
notify-url: "https://yourdomain.com/pay/callback"
return-url: "https://yourdomain.com/pay/success"
gateway-url: "https://openapi.alipay.com/gateway.do"
二、实现支付功能
1. 网站支付
创建支付接口,生成支付页面链接:
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
@RestController
@RequestMapping("/pay")
public class PayController {
@Autowired
private AlipayConfig alipayConfig;
@GetMapping("/create")
public String createPayment(@RequestParam String orderId, @RequestParam Double amount) {
AlipayClient alipayClient = new DefaultAlipayClient(
alipayConfig.getGatewayUrl(),
alipayConfig.getAppId(),
alipayConfig.getPrivateKey(),
"json",
"UTF-8",
alipayConfig.getPublicKey(),
"RSA2"
);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setReturnUrl(alipayConfig.getReturnUrl());
request.setNotifyUrl(alipayConfig.getNotifyUrl());
request.setBizContent("{" +
""out_trade_no":"" + orderId + ""," +
""total_amount":" + amount + "," +
""subject":"测试商品"," +
""product_code":"FAST_INSTANT_TRADE_PAY"" +
"}");
try {
String form = alipayClient.pageExecute(request).getBody();
return form; // 返回支付页面
} catch (Exception e) {
throw new RuntimeException("支付接口调用失败", e);
}
}
}
2. APP 支付
APP 支付需要生成支付签名并返回给客户端:
@GetMapping("/app/create")
public Map<String, String> createAppPayment(@RequestParam String orderId, @RequestParam Double amount) {
AlipayClient alipayClient = new DefaultAlipayClient(
alipayConfig.getGatewayUrl(),
alipayConfig.getAppId(),
alipayConfig.getPrivateKey(),
"json",
"UTF-8",
alipayConfig.getPublicKey(),
"RSA2"
);
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setNotifyUrl(alipayConfig.getNotifyUrl());
request.setBizContent("{" +
""out_trade_no":"" + orderId + ""," +
""total_amount":" + amount + "," +
""subject":"测试商品"," +
""product_code":"QUICK_MSECURITY_PAY"" +
"}");
try {
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
Map<String, String> result = new HashMap<>();
result.put("result", response.getBody());
return result;
} catch (Exception e) {
throw new RuntimeException("APP 支付接口调用失败", e);
}
}
三、单笔转账给用户
使用支付宝的单笔转账接口实现转账功能:
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
@PostMapping("/transfer")
public String transfer(@RequestParam String orderId, @RequestParam Double amount) {
AlipayClient alipayClient = new DefaultAlipayClient(
alipayConfig.getGatewayUrl(),
alipayConfig.getAppId(),
alipayConfig.getPrivateKey(),
"json",
"UTF-8",
alipayConfig.getPublicKey(),
"RSA2"
);
AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
request.setBizContent("{" +
""out_biz_no":"" + orderId + ""," +
""trans_amount":" + amount + "," +
""product_code":"TRANS_ACCOUNT_NO_PWD"," +
""payee_info":{" +
" "identity":"用户支付宝账号"," +
" "identity_type":"ALIPAY_USER_ID"," +
" "name":"用户姓名"" +
"}" +
"}");
try {
AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request);
return response.getBody();
} catch (Exception e) {
return "转账失败:" + e.getMessage();
}
}
四、退款功能
实现退款接口:
import com.alipay.api.request.AlipayTradeRefundRequest;
@PostMapping("/refund")
public String refund(@RequestParam String orderId, @RequestParam Double refundAmount) {
AlipayClient alipayClient = new DefaultAlipayClient(
alipayConfig.getGatewayUrl(),
alipayConfig.getAppId(),
alipayConfig.getPrivateKey(),
"json",
"UTF-8",
alipayConfig.getPublicKey(),
"RSA2"
);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setBizContent("{" +
""out_trade_no":"" + orderId + ""," +
""refund_amount":" + refundAmount +
"}");
try {
AlipayTradeRefundResponse response = alipayClient.execute(request);
return response.getBody();
} catch (Exception e) {
return "退款失败:" + e.getMessage();
}
}
五、异步通知处理
处理支付宝异步通知:
@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 = AlipaySignature.rsaCheckV1(params, alipayConfig.getPublicKey(), "UTF-8", "RSA2");
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";
}
}
六、测试与部署
1. 沙箱环境测试
-
使用支付宝沙箱环境和测试账号完成支付、退款、回调等流程测试。
-
确保所有功能正常后,切换到生产环境。
2. 部署注意事项
-
配置 HTTPS,确保数据传输安全。
-
保护私钥和配置文件,避免泄露。
通过以上步骤,你可以完整实现基于 Spring Boot 的支付宝支付模块,包括网站支付、APP 支付、单笔转账和退款功能。在生产环境中,建议对系统的安全性和稳定性进行全面优化。
[自动更新内容]
Copyright © 2025 idc.xymww.com. All Rights Reserved.
渝ICP备2024048343号-1
渝公网安备50010502504446号
Linkreate WordPress AI插件-AI 客服助手