From e55e845adbbd5a137ba3f5fb2eea3b37b14f4c57 Mon Sep 17 00:00:00 2001 From: bootx Date: Mon, 19 Feb 2024 22:39:15 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=B5=81=E6=B0=B4=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BE=AE=E8=B0=83=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=BB=84=E5=90=88=E6=94=AF=E4=BB=98=E6=A0=B7=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _doc/Task.md | 4 +- .../demo/controller/AggregateController.java | 4 +- .../daxpay/demo/result/PayOrderResult.java | 7 ++++ .../daxpay/demo/service/AggregateService.java | 38 ++++++++++++++++- .../daxpay/sdk/payment/PayOrderTest.java | 42 ++++++++++++++++++- .../controller/channel/CashController.java | 2 +- .../controller/channel/VoucherController.java | 6 +++ .../wechat/service/WeChatPayService.java | 2 - 8 files changed, 96 insertions(+), 9 deletions(-) diff --git a/_doc/Task.md b/_doc/Task.md index 841eefebd..bbe9b5f30 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -1,10 +1,10 @@ 2.0.1: -- [ ] 完善各种同步支付方式 +- [x] 完善各种同步支付方式 - [x] 现金支付, 现金流水 - [x] 钱包支付, 钱包流水 - [x] 储值卡支付, 储值卡流水 - [ ] 支付回调通知和退款回调通知功能 -- [ ] 通道配置启用停用配置生效 +- [x] 通道配置启用停用配置生效 - [x] 支付对账的序列化生成器有问题,待platform更新 2.0.x 版本内容 - [ ] 云闪付接入 diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/AggregateController.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/AggregateController.java index 5486c92bd..f61ff92e4 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/AggregateController.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/controller/AggregateController.java @@ -68,8 +68,8 @@ public class AggregateController { @Operation(summary = "通过付款码发起支付") @PostMapping("/barCodePay") - public ResResult barCodePay(@RequestBody AggregateSimplePayParam param){ - return Res.ok(); + public ResResult barCodePay(@RequestBody AggregateSimplePayParam param){ + return Res.ok(aggregateService.barPay(param)); } } diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/PayOrderResult.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/PayOrderResult.java index 0810cba2c..8fd556ec0 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/PayOrderResult.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/result/PayOrderResult.java @@ -1,6 +1,7 @@ package cn.bootx.platform.daxpay.demo.result; import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum; +import cn.bootx.platform.daxpay.sdk.code.PayStatusEnum; import lombok.Getter; import lombok.Setter; @@ -28,4 +29,10 @@ public class PayOrderResult { /** 支付参数体(通常用于发起异步支付的参数) */ private String payBody; + /** + * 支付状态 + * @see PayStatusEnum + */ + private String status; + } diff --git a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java index 07a242ddd..df638f874 100644 --- a/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java +++ b/daxpay-single-demo/src/main/java/cn/bootx/platform/daxpay/demo/service/AggregateService.java @@ -200,10 +200,46 @@ public class AggregateService { return payOrderResult; } + /** + * 条码支付 + */ + public PayOrderResult barPay(AggregateSimplePayParam param){ + // 判断通道属于什么 + PayChannelEnum payChannel = this.getPayChannel(param.getAuthCode()); + + int amount = param.getAmount() + .multiply(BigDecimal.valueOf(100)) + .intValue(); + + SimplePayParam simplePayParam = new SimplePayParam(); + simplePayParam.setBusinessNo(param.getBusinessNo()); + simplePayParam.setTitle(param.getTitle()); + simplePayParam.setAmount(amount); + simplePayParam.setChannel(payChannel.getCode()); + simplePayParam.setPayWay(PayWayEnum.BARCODE.getCode()); + + String ip = Optional.ofNullable(WebServletUtil.getRequest()) + .map(ServletUtil::getClientIP) + .orElse("127.0.0.1"); + simplePayParam.setClientIp(ip); + // 异步回调地址 + simplePayParam.setNotNotify(true); + + DaxPayResult execute = DaxPayKit.execute(simplePayParam); + + // 判断是否支付成功 + if (execute.getCode() != 0){ + throw new BizException(execute.getMsg()); + } + PayOrderResult payOrderResult = new PayOrderResult(); + BeanUtil.copyProperties(execute.getData(),payOrderResult); + return payOrderResult; + } + /** * 根据付款码判断属于那种支付通道 */ - public PayChannelEnum getPayChannel(String authCode) { + private PayChannelEnum getPayChannel(String authCode) { if (StrUtil.isBlank(authCode)) { throw new BizException("付款码不可为空"); } diff --git a/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java b/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java index 5aae65ac4..80e0bec67 100644 --- a/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java +++ b/daxpay-single-sdk/src/test/java/cn/bootx/platform/daxpay/sdk/payment/PayOrderTest.java @@ -5,12 +5,15 @@ import cn.bootx.platform.daxpay.sdk.code.PayWayEnum; import cn.bootx.platform.daxpay.sdk.model.pay.PayOrderModel; import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig; import cn.bootx.platform.daxpay.sdk.net.DaxPayKit; +import cn.bootx.platform.daxpay.sdk.param.channel.VoucherPayParam; +import cn.bootx.platform.daxpay.sdk.param.channel.WalletPayParam; import cn.bootx.platform.daxpay.sdk.param.pay.PayChannelParam; import cn.bootx.platform.daxpay.sdk.param.pay.PayParam; import cn.bootx.platform.daxpay.sdk.response.DaxPayResult; import org.junit.Before; import org.junit.Test; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -56,10 +59,47 @@ public class PayOrderTest { } /** - * 多通道支付 + * 多通道支付. 全部为同步支付方式 */ @Test public void multiPay() { + PayParam param = new PayParam(); + param.setClientIp("127.0.0.1"); + param.setNotNotify(true); + param.setBusinessNo("P0002"); + param.setTitle("测试组合支付"); + // 现金支付 + PayChannelParam cash = new PayChannelParam(); + cash.setChannel(PayChannelEnum.CASH.getCode()); + cash.setWay(PayWayEnum.NORMAL.getCode()); + cash.setAmount(10); + + // 储值卡支付 + PayChannelParam card = new PayChannelParam(); + card.setChannel(PayChannelEnum.VOUCHER.getCode()); + card.setWay(PayWayEnum.NORMAL.getCode()); + card.setAmount(10); + // 储值卡通道参数 + VoucherPayParam voucherPayParam = new VoucherPayParam(); + voucherPayParam.setCardNo("123456"); + card.setChannelParam(voucherPayParam); + + // 钱包支付 + PayChannelParam wallet = new PayChannelParam(); + wallet.setChannel(PayChannelEnum.WALLET.getCode()); + wallet.setWay(PayWayEnum.NORMAL.getCode()); + wallet.setAmount(10); + // 钱包通道支付参数 + WalletPayParam walletPayParam = new WalletPayParam(); + walletPayParam.setUserId("1"); + wallet.setChannelParam(walletPayParam); + + // 组装组合支付的参数 + List payChannels = Arrays.asList(cash, card, wallet); + param.setPayChannels(payChannels); + DaxPayResult execute = DaxPayKit.execute(param); + System.out.println(execute); + System.out.println(execute.getData()); } } diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/CashController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/CashController.java index 9339c0ac5..5d58d07af 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/CashController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/CashController.java @@ -34,7 +34,7 @@ public class CashController { @Operation(summary = "查询记录详情") - @GetMapping("/findById") + @GetMapping("/record/findById") public ResResult findById(Long id){ return Res.ok(cashRecordService.findById(id)); } diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/VoucherController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/VoucherController.java index 3cb68a451..de1501959 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/VoucherController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/channel/VoucherController.java @@ -63,4 +63,10 @@ public class VoucherController { public ResResult> recordPage(PageParam pageParam, VoucherRecordQuery query){ return Res.ok(voucherRecordService.page(pageParam, query)); } + + @Operation(summary = "查询记录详情") + @GetMapping("/record/findById") + public ResResult recordFindById(Long id){ + return Res.ok(voucherRecordService.findById(id)); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java index de34c873e..957ec99c8 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/channel/wechat/service/WeChatPayService.java @@ -56,8 +56,6 @@ public class WeChatPayService { private final PaySyncService paySyncService; - private final WeChatPaySyncService weChatPaySyncService; - /** * 校验 */