Spring Boot 集成微信支付与支付宝支付:手把手教你实现全功能支付系统
·
引言:为什么需要集成第三方支付?
在现代互联网应用中,支付功能几乎是不可或缺的一部分。无论是电商、在线教育、还是共享经济平台,支持多种支付方式显著都能提升用户体验。微信支付和支付宝作为国内最常用的支付工具,几乎覆盖了所有场景。
本文将以一个简单的电商项目为例,详细讲解如何在 Spring Boot 项目中集成微信支付和支付宝支付。我们将从零开始,逐步完成支付功能的开发和测试,确保每个细节都清晰明了。

第一部分:准备工作
1.1 项目依赖
首先,我们需要在 pom.xml 中添加支付相关的依赖:
<dependencies>
<!-- 支付宝支付依赖 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.11.0</version>
</dependency>
<!-- 微信支付依赖 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>4.2.0</version>
</dependency>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
1.2 支付宝与微信支付的 API 配置
在 application.properties 中添加支付相关的配置:
# 支付宝配置
alipay.app.id=your_app_id
alipay.merchant.private.key=your_private_key
alipay.alipay.public.key=alipay_public_key
# 微信支付配置
wxpay.mch.id=your_mch_id
wxpay.api.secret=your_api_secret
wxpay.notify.url=http://localhost:8080/wxpay/notify
第二部分:支付宝支付集成
2.1 支付宝支付原理
支付宝支付分为以下几个步骤:
- 生成支付链接:用户提交订单后,后端生成支付宝支付链接。
- 跳转到支付宝页面:用户点击链接跳转到支付宝页面完成支付。
- 支付成功回调:支付宝支付成功后,会回调后端通知 URL。
2.2 创建支付宝支付工具类
@Component
public class AlipayUtil {
@Value("${alipay.app.id}")
private String appId;
@Value("${alipay.merchant.private.key}")
private String privateKey;
@Value("${alipay.alipay.public.key}")
private String publicKey;
public String createPayUrl(Map<String, String> params) throws Exception {
AlipayTradePagePayRequestBuilder builder = new AlipayTradePagePayRequestBuilder()
.setSubject(params.get("subject"))
.setTotalAmount(params.get("totalAmount"))
.setOutTradeNo(params.get("outTradeNo"))
.setReturnUrl("http://localhost:8080/pay/success")
.setNotifyUrl("http://localhost:8080/alipay/notify");
AlipayTradeService tradeService = new AlipayTradeServiceImpl.ClientBuilder()
.setappId(appId)
.setPrivateKey(privateKey)
.setAlipayPublicKey(publicKey)
.build();
return tradeService.pagePay(builder.build(), "GET", "UTF-8");
}
}
2.3 创建支付宝支付 Controller
@RestController
@RequestMapping("/alipay")
public class AlipayController {
@Autowired
private AlipayUtil alipayUtil;
@PostMapping("/createOrder")
public ResponseEntity<String> createOrder(@RequestBody Map<String, String> params) {
try {
String payUrl = alipayUtil.createPayUrl(params);
return ResponseEntity.ok(payUrl);
} catch (Exception e) {
return ResponseEntity.badRequest().body(" 支付链接生成失败");
}
}
@PostMapping("/notify")
public ResponseEntity<String> notify(@RequestParam Map<String, String> params) {
// 处理支付宝回调
return ResponseEntity.ok("success");
}
}
第三部分:微信支付集成
3.1 微信支付原理
微信支付分为以下几个步骤:
- 生成预支付交易单:用户提交订单后,后端生成预支付交易单。
- 调起微信支付:前端通过
wx.chooseWXPay调起微信支付界面。 - 支付成功回调:微信支付成功后,会回调后端通知 URL。
3.2 创建微信支付工具类
@Component
public class WxPayUtil {
@Value("${wxpay.mch.id}")
private String mchId;
@Value("${wxpay.api.secret}")
private String apiSecret;
@Value("${wxpay.notify.url}")
private String notifyUrl;
public WxPayConfig wxPayConfig() {
WxPayConfig config = new WxPayConfig();
config.setMchId(mchId);
config.setApiSecret(apiSecret);
config.setNotifyUrl(notifyUrl);
return config;
}
public Map<String, String> createOrder(Map<String, String> params) throws Exception {
WxPay wxPay = new WxPay(wxPayConfig());
Map<String, String> data = new HashMap<>();
data.put("body", params.get("body"));
data.put("out_trade_no", params.get("out_trade_no"));
data.put("total_fee", params.get("total_fee"));
data.put("spbill_create_ip", "127.0.0.1");
data.put("notify_url", notifyUrl);
data.put("trade_type", "NATIVE");
return wxPay.pay(data);
}
}
3.3 创建微信支付 Controller
@RestController
@RequestMapping("/wxpay")
public class WxPayController {
@Autowired
private WxPayUtil wxPayUtil;
@PostMapping("/createOrder")
public ResponseEntity<Map<String, String>> createOrder(@RequestBody Map<String, String> params) {
try {
Map<String, String> payInfo = wxPayUtil.createOrder(params);
return ResponseEntity.ok(payInfo);
} catch (Exception e) {
return ResponseEntity.badRequest().body(null);
}
}
@PostMapping("/notify")
public ResponseEntity<String> notify(HttpServletRequest request) throws IOException {
// 处理微信支付回调
return ResponseEntity.ok("success");
}
}
第四部分:统一支付接口
为了方便前端调用,我们可以创建一个统一的支付接口:
@RestController
@RequestMapping("/pay")
public class PayController {
@Autowired
private AlipayController alipayController;
@Autowired
private WxPayController wxPayController;
@PostMapping("/{type}")
public ResponseEntity<?> pay(@PathVariable String type, @RequestBody Map<String, String> params) {
if ("alipay".equals(type)) {
return alipayController.createOrder(params);
} else if ("wxpay".equals(type)) {
return wxPayController.createOrder(params);
}
return ResponseEntity.badRequest().body(" 支付方式不支持");
}
}
第五部分:实际应用中的注意事项
5.1 支付安全
- 所有敏感信息(如 API 密钥、私钥等)应加密存储。
- 支付回调地址必须是外网可访问的 URL。
5.2 支付异步处理
- 支付回调逻辑应尽量简单,避免阻塞。
- 使用消息队列(如 Kafka)处理异步任务。
5.3 测试环境搭建
- 使用支付宝和微信的沙箱环境进行测试。
- 确保测试环境与生产环境隔离。
第六部分:总结与展望
通过本文的学习,你应该已经掌握了如何在 Spring Boot 项目中集成微信支付和支付宝支付。从配置到编码再到测试,每一步都至关重要。未来,你可以进一步扩展支付功能,例如:
- 支持更多支付方式:如银联支付、Apple Pay 等。
- 完善退款功能:实现订单退款和部分退款。
- 增加支付状态监控:实时监控支付状态并进行相应的处理。
互动环节:你对支付集成还有哪些疑问?
在实际开发中,你是否遇到了支付集成的困难?或者你对本文的内容还有哪些疑问?欢迎在评论区留言交流!我会定期查看并回复大家的问题。
希望这篇文章能够帮助你在 Spring Boot 项目中顺利集成微信支付和支付宝支付!如果你觉得这篇文章对你有帮助,请记得点赞和分享给更多的小伙伴哦!😊
更多推荐
所有评论(0)