Java SpringBoot 整合实现微信支付,支付宝支付,京东支付,招商聚合支付,银联聚合支付 附代码
任职的公司项目中,一直在负责项目的支付模块。微信、支付宝是最基础的。还有京东原生支付,使用京东App扫码,支持京东白条分期付款的方式。招商聚合支付、银联聚合支付的聚合方式,将微信和支付宝支付聚合起来,获得二维码后使用微信或支付宝扫码都可以支付。之前有对接过国外信用卡的支付,也类似于聚合,不过现在没有支付配置无法集成了
简单看一下项目效果,完整代码文末有 GitHub 链接
微信支付:

支付宝支付:

京东原生支付:

UMS银联商务聚合支付:

CMB招商聚合支付:

聚合支付链接url转二维码,使用微信或支付宝扫码后:

在pom文件中引入 微信支付、支付宝支付、京东支付 的sdk。招商聚合 和 银联商务支付没有sdk,直接手写的逻辑
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 微信支付扩展 -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>4.1.0</version>
</dependency>
<!-- 支付宝支付扩展 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.39.99.ALL</version>
</dependency>
<!-- 京东pay -->
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay-JDPay</artifactId>
<version>2.9.10</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.28</version>
</dependency>
</dependencies>
创建一个 PaymentController 包含 支付入口,查询和退款接口
package com.cnblog.payment.controller; import com.cnblog.payment.dto.Order; import com.cnblog.payment.vo.response.Response; import com.cnblog.payment.enums.PaymentTypeEnum; import com.cnblog.payment.factory.PaymentFactory; import com.cnblog.payment.service.AliPaymentService; import com.cnblog.payment.service.PaymentService; import com.cnblog.payment.service.WxPaymentService; import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; /** * 支付控制器 * author: AnYuan */ @RestController @RequestMapping("/api") public class PaymentController { @Autowired private PaymentFactory paymentFactory; @PostMapping("/pay") public Response<?> pay(@RequestBody Order order){ // 校验订单参数 paymentFactory.checkOrder(order); PaymentService paymentService = paymentFactory.getPaymentService(PaymentTypeEnum.getByName(order.getPaymentType())); return paymentService.pay(order); } @GetMapping("/query/{orderNo}/{paymentType}") public Response<?> query(@PathVariable("orderNo") String orderNo, @PathVariable("paymentType") String paymentType) { PaymentService paymentService = paymentFactory.getPaymentService(PaymentTypeEnum.getByName(paymentType)); return paymentService.query(orderNo); } @PostMapping("/refund") public Response<?> refund(@RequestBody Order order) { PaymentService paymentService = paymentFactory.getPaymentService(PaymentTypeEnum.getByName(order.getPaymentType())); return paymentService.refund(order); } }
一个支付方式枚举类:PaymentTypeEnum
package com.cnblog.payment.enums; import lombok.Getter; @Getter public enum PaymentTypeEnum { ALIPAY("支付宝支付"), JD("京东原生支付"), WXPAY("微信支付"), UMS("银联聚合支付"), CMB("招商聚合支付"); private String desc; PaymentTypeEnum(String desc) { this.desc = desc; } public static PaymentTypeEnum getByName(String name) { for (PaymentTypeEnum paymentTypeEnum : PaymentTypeEnum.values()) { if (paymentTypeEnum.name().equals(name)) { return paymentTypeEnum; } } return null; } }
一个支付方式工厂类。不同的支付方式只需要在支付接口传不同的 paymentType 参数即可
package com.cnblog.payment.factory; import com.cnblog.payment.dto.Order; import com.cnblog.payment.enums.PaymentTypeEnum; import com.cnblog.payment.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @author AnYuan * @description 支付工厂 */ @Service public class PaymentFactory { @Autowired private WxPaymentService wxPaymentService; @Autowired private AliPaymentService alipayService; @Autowired private JdPaymentService jdPaymentService; @Autowired private UmsPaymentService umsPaymentService; @Autowired private CmbPaymentService cmbPaymentService; public void checkOrder(Order order) { // 校验订单参数 } public PaymentService getPaymentService(PaymentTypeEnum paymentTypeEnum) { if (paymentTypeEnum == null) { throw new IllegalArgumentException("不支持的支付类型"); } switch (paymentTypeEnum) { case WXPAY: return wxPaymentService; case ALIPAY: return alipayService; case JD: return jdPaymentService; case UMS: return umsPaymentService; case CMB: return cmbPaymentService; default: throw new IllegalArgumentException("不支持的支付类型"); } } }
上面的代码简单介绍一下大概的结构和支持的支付方式,具体的实现逻辑可以访问 Github 本篇代码
本篇代码Github:https://github.com/Journeyerr/cnblogs/tree/master/payment

浙公网安备 33010602011771号