From 7a53728982cfd04832e8cf5682ec81e3f267d022 Mon Sep 17 00:00:00 2001 From: xxm1995 Date: Fri, 28 Jul 2023 08:20:05 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=A4=9A=E5=8D=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../daxpay/code/pay/PayWayExtraCode.java | 3 ++ .../core/cashier/service/CashierService.java | 7 ++-- .../channel/alipay/service/AliPayService.java | 22 +++++------ .../wechat/service/WeChatPayService.java | 6 +-- .../daxpay/core/pay/service/PayService.java | 8 ++-- .../sync/service/PayExpiredTimeService.java | 2 +- .../core/sync/service/PaySyncService.java | 4 +- .../param/cashier/CashierSinglePayParam.java | 4 ++ .../{PayWaylUtil.java => PayWayUtil.java} | 39 ++++++++++++------- 9 files changed, 58 insertions(+), 37 deletions(-) rename dax-pay/src/main/java/cn/bootx/platform/daxpay/util/{PayWaylUtil.java => PayWayUtil.java} (78%) diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/pay/PayWayExtraCode.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/pay/PayWayExtraCode.java index 21e787a9b..78a2c1a55 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/pay/PayWayExtraCode.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/pay/PayWayExtraCode.java @@ -17,6 +17,9 @@ public interface PayWayExtraCode { /** 单张储值卡 */ String VOUCHER_NO = "voucher_no"; + /** 多张储值卡 */ + String VOUCHER_NO_LIST = "voucher_no_list"; + /** 钱包ID */ String WALLET_ID = "wallet_id"; diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/cashier/service/CashierService.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/cashier/service/CashierService.java index f9924ce86..dc566ac4f 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/cashier/service/CashierService.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/cashier/service/CashierService.java @@ -21,7 +21,7 @@ import cn.bootx.platform.daxpay.param.cashier.CashierCombinationPayParam; import cn.bootx.platform.daxpay.param.cashier.CashierSinglePayParam; import cn.bootx.platform.daxpay.param.pay.PayParam; import cn.bootx.platform.daxpay.param.pay.PayWayParam; -import cn.bootx.platform.daxpay.util.PayWaylUtil; +import cn.bootx.platform.daxpay.util.PayWayUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.ijpay.core.enums.SignType; @@ -75,11 +75,12 @@ public class CashierService { .setAmount(param.getAmount()); // 处理附加参数 - HashMap map = new HashMap<>(1); + HashMap map = new HashMap<>(1); map.put(PayWayExtraCode.AUTH_CODE, param.getAuthCode()); map.put(PayWayExtraCode.OPEN_ID, param.getOpenId()); map.put(PayWayExtraCode.VOUCHER_NO, param.getVoucherNo()); - String extraParamsJson = PayWaylUtil.buildExtraParamsJson(param.getPayChannel(), map); + map.put(PayWayExtraCode.VOUCHER_NO_LIST, param.getVoucherNoList()); + String extraParamsJson = PayWayUtil.buildExtraParamsJson(param.getPayChannel(), map); payWayParam.setExtraParamsJson(extraParamsJson); PayParam payParam = new PayParam() diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/alipay/service/AliPayService.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/alipay/service/AliPayService.java index eecf277dc..9939ac839 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/alipay/service/AliPayService.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/alipay/service/AliPayService.java @@ -11,7 +11,7 @@ import cn.bootx.platform.daxpay.dto.pay.AsyncPayInfo; import cn.bootx.platform.daxpay.exception.payment.PayFailureException; import cn.bootx.platform.daxpay.param.pay.PayWayParam; import cn.bootx.platform.daxpay.param.channel.alipay.AliPayParam; -import cn.bootx.platform.daxpay.util.PayWaylUtil; +import cn.bootx.platform.daxpay.util.PayWayUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.Method; import com.alipay.api.AlipayApiException; @@ -106,8 +106,8 @@ public class AliPayService { model.setOutTradeNo(String.valueOf(payment.getId())); model.setTotalAmount(amount.toPlainString()); // 过期时间 - model.setTimeoutExpress(PayWaylUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayWaylUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); + model.setTimeoutExpress(PayWayUtil.getAliExpiredTime(alipayConfig.getExpireTime())); + payment.setExpiredTime(PayWayUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); model.setProductCode(AliPayCode.QUICK_WAP_PAY); model.setQuitUrl(aliPayParam.getReturnUrl()); @@ -137,8 +137,8 @@ public class AliPayService { model.setProductCode(QUICK_MSECURITY_PAY); model.setOutTradeNo(String.valueOf(payment.getId())); // 过期时间 - model.setTimeoutExpress(PayWaylUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayWaylUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); + model.setTimeoutExpress(PayWayUtil.getAliExpiredTime(alipayConfig.getExpireTime())); + payment.setExpiredTime(PayWayUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); model.setTotalAmount(amount.toPlainString()); try { @@ -161,8 +161,8 @@ public class AliPayService { model.setSubject(payment.getTitle()); model.setOutTradeNo(String.valueOf(payment.getId())); // 过期时间 - model.setTimeoutExpress(PayWaylUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayWaylUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); + model.setTimeoutExpress(PayWayUtil.getAliExpiredTime(alipayConfig.getExpireTime())); + payment.setExpiredTime(PayWayUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); model.setTotalAmount(amount.toPlainString()); // 目前仅支持FAST_INSTANT_TRADE_PAY model.setProductCode(AliPayCode.FAST_INSTANT_TRADE_PAY); @@ -192,8 +192,8 @@ public class AliPayService { model.setTotalAmount(amount.toPlainString()); // 过期时间 - model.setTimeoutExpress(PayWaylUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayWaylUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); + model.setTimeoutExpress(PayWayUtil.getAliExpiredTime(alipayConfig.getExpireTime())); + payment.setExpiredTime(PayWayUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); try { AlipayTradePrecreateResponse response = AliPayApi.tradePrecreatePayToResponse(model, @@ -219,8 +219,8 @@ public class AliPayService { model.setAuthCode(aliPayParam.getAuthCode()); // 过期时间 - model.setTimeoutExpress(PayWaylUtil.getAliExpiredTime(alipayConfig.getExpireTime())); - payment.setExpiredTime(PayWaylUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); + model.setTimeoutExpress(PayWayUtil.getAliExpiredTime(alipayConfig.getExpireTime())); + payment.setExpiredTime(PayWayUtil.getPaymentExpiredTime(alipayConfig.getExpireTime())); model.setTotalAmount(amount.toPlainString()); try { diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/wechat/service/WeChatPayService.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/wechat/service/WeChatPayService.java index e8a59e1b7..479238f6e 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/wechat/service/WeChatPayService.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/channel/wechat/service/WeChatPayService.java @@ -15,7 +15,7 @@ import cn.bootx.platform.daxpay.dto.pay.AsyncPayInfo; import cn.bootx.platform.daxpay.exception.payment.PayFailureException; import cn.bootx.platform.daxpay.param.pay.PayWayParam; import cn.bootx.platform.daxpay.param.channel.wechat.WeChatPayParam; -import cn.bootx.platform.daxpay.util.PayWaylUtil; +import cn.bootx.platform.daxpay.util.PayWayUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.StrUtil; @@ -224,14 +224,14 @@ public class WeChatPayService { private UnifiedOrderModel.UnifiedOrderModelBuilder buildParams(String amount, Payment payment, WeChatPayConfig weChatPayConfig, String tradeType) { // 过期时间 - payment.setExpiredTime(PayWaylUtil.getPaymentExpiredTime(weChatPayConfig.getExpireTime())); + payment.setExpiredTime(PayWayUtil.getPaymentExpiredTime(weChatPayConfig.getExpireTime())); return UnifiedOrderModel.builder() .appid(weChatPayConfig.getWxAppId()) .mch_id(weChatPayConfig.getWxMchId()) .nonce_str(WxPayKit.generateStr()) .time_start(LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN)) // 反正v2版本的超时时间无效 - .time_expire(PayWaylUtil.getWxExpiredTime(weChatPayConfig.getExpireTime())) + .time_expire(PayWayUtil.getWxExpiredTime(weChatPayConfig.getExpireTime())) .body(payment.getTitle()) .out_trade_no(String.valueOf(payment.getId())) .total_fee(amount) diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/service/PayService.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/service/PayService.java index e74db6dd0..f1b65ab56 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/service/PayService.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/service/PayService.java @@ -24,7 +24,7 @@ import cn.bootx.platform.daxpay.exception.payment.PayUnsupportedMethodException; import cn.bootx.platform.daxpay.mq.PayEventSender; import cn.bootx.platform.daxpay.param.pay.PayParam; import cn.bootx.platform.daxpay.param.pay.PayWayParam; -import cn.bootx.platform.daxpay.util.PayWaylUtil; +import cn.bootx.platform.daxpay.util.PayWayUtil; import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -68,7 +68,7 @@ public class PayService { // 检验参数 ValidationUtil.validateParam(payParam); // 异步支付方式检查 - PayWaylUtil.validationAsyncPayMode(payParam); + PayWayUtil.validationAsyncPayMode(payParam); // 商户和应用信息检测 this.checkMchAndApp(payParam); // 获取并校验支付状态 @@ -94,7 +94,7 @@ public class PayService { } // 1. 价格检测 - PayWaylUtil.validationAmount(payParam.getPayWayList()); + PayWayUtil.validationAmount(payParam.getPayWayList()); // 2. 创建支付记录 payment = this.createPayment(payParam); @@ -139,7 +139,7 @@ public class PayService { // 发起支付成功进行的执行方法 strategyList.forEach(AbsPayStrategy::doSuccessHandler); // 所有支付方式都是同步时进行Payment处理 - if (PayWaylUtil.isNotSync(payParam.getPayWayList())) { + if (PayWayUtil.isNotSync(payParam.getPayWayList())) { // 修改payment支付状态为成功 paymentObj.setPayStatus(TRADE_SUCCESS); paymentObj.setPayTime(LocalDateTime.now()); diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PayExpiredTimeService.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PayExpiredTimeService.java index d29a6caac..dc31134a5 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PayExpiredTimeService.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PayExpiredTimeService.java @@ -59,7 +59,7 @@ public class PayExpiredTimeService { // } // // // 3 拿到异步支付方法, 与支付网关进行同步 -// PayWayParam asyncPayMode = PayWaylUtil.getAsyncPayModeParam(payParam); +// PayWayParam asyncPayMode = PayWayUtil.getAsyncPayModeParam(payParam); // AbsPayStrategy syncPayStrategy = PayStrategyFactory.create(asyncPayMode); // syncPayStrategy.initPayParam(payment, payParam); // PaySyncResult paySyncResult = syncPayStrategy.doSyncPayStatusHandler(); diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PaySyncService.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PaySyncService.java index 5f8fd4265..099d1ee21 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PaySyncService.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/sync/service/PaySyncService.java @@ -17,7 +17,7 @@ import cn.bootx.platform.daxpay.exception.payment.PayUnsupportedMethodException; import cn.bootx.platform.daxpay.mq.PayEventSender; import cn.bootx.platform.daxpay.param.pay.PayParam; import cn.bootx.platform.daxpay.param.pay.PayWayParam; -import cn.bootx.platform.daxpay.util.PayWaylUtil; +import cn.bootx.platform.daxpay.util.PayWayUtil; import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -101,7 +101,7 @@ public class PaySyncService { } // 拿到对应的支付方式 - PayWayParam asyncPayMode = PayWaylUtil.getAsyncPayModeParam(payParam); + PayWayParam asyncPayMode = PayWayUtil.getAsyncPayModeParam(payParam); AbsPayStrategy syncPayStrategy = PayStrategyFactory.create(asyncPayMode); // 对同步结果处理 diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/param/cashier/CashierSinglePayParam.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/param/cashier/CashierSinglePayParam.java index 4f46cc47d..c87dcd549 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/param/cashier/CashierSinglePayParam.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/param/cashier/CashierSinglePayParam.java @@ -5,6 +5,7 @@ import lombok.Data; import lombok.experimental.Accessors; import java.math.BigDecimal; +import java.util.List; /** * 结算台发起支付参数 @@ -47,6 +48,9 @@ public class CashierSinglePayParam { @Schema(description = "储值卡") private String voucherNo; + @Schema(description = "储值卡") + private List voucherNoList; + @Schema(description = "钱包ID") private String walletId; diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/util/PayWaylUtil.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/util/PayWayUtil.java similarity index 78% rename from dax-pay/src/main/java/cn/bootx/platform/daxpay/util/PayWaylUtil.java rename to dax-pay/src/main/java/cn/bootx/platform/daxpay/util/PayWayUtil.java index 5ace50e2d..fe2ec58cb 100644 --- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/util/PayWaylUtil.java +++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/util/PayWayUtil.java @@ -1,6 +1,7 @@ package cn.bootx.platform.daxpay.util; import cn.bootx.platform.common.core.util.BigDecimalUtil; +import cn.bootx.platform.common.core.util.CollUtil; import cn.bootx.platform.common.core.util.LocalDateTimeUtil; import cn.bootx.platform.daxpay.code.pay.PayChannelEnum; import cn.bootx.platform.daxpay.code.pay.PayWayExtraCode; @@ -13,6 +14,7 @@ import cn.bootx.platform.daxpay.param.channel.alipay.AliPayParam; import cn.bootx.platform.daxpay.param.channel.voucher.VoucherPayParam; import cn.bootx.platform.daxpay.param.channel.wechat.WeChatPayParam; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import lombok.experimental.UtilityClass; @@ -31,7 +33,7 @@ import java.util.Map; * @since 2022/7/12 */ @UtilityClass -public class PayWaylUtil { +public class PayWayUtil { /** * 获取支付宝的过期时间 @@ -80,31 +82,42 @@ public class PayWaylUtil { * @param payChannel 支付通道编码 * @param map 支付方式扩展字段信息 key 为 PayModelExtraCode中定义的 */ - public String buildExtraParamsJson(String payChannel, Map map) { + public String buildExtraParamsJson(String payChannel, Map map) { PayChannelEnum payChannelEnum = PayChannelEnum.findByCode(payChannel); switch (payChannelEnum) { case ALI: { - return JSONUtil.toJsonStr(new AliPayParam().setAuthCode(map.get(PayWayExtraCode.AUTH_CODE)) - .setReturnUrl(map.get(PayWayExtraCode.RETURN_URL))); + return JSONUtil.toJsonStr(new AliPayParam().setAuthCode(MapUtil.getStr(map,PayWayExtraCode.AUTH_CODE)) + .setReturnUrl(MapUtil.getStr(map,PayWayExtraCode.RETURN_URL))); } case WECHAT: { - return JSONUtil.toJsonStr(new WeChatPayParam().setOpenId(map.get(PayWayExtraCode.OPEN_ID)) - .setAuthCode(map.get(PayWayExtraCode.AUTH_CODE))); + return JSONUtil.toJsonStr(new WeChatPayParam().setOpenId(MapUtil.getStr(map,PayWayExtraCode.OPEN_ID)) + .setAuthCode(MapUtil.getStr(map,PayWayExtraCode.AUTH_CODE))); } case VOUCHER: { - String voucherNo = map.get(PayWayExtraCode.VOUCHER_NO); + String voucherNo = MapUtil.getStr(map,PayWayExtraCode.VOUCHER_NO); + @SuppressWarnings("unchecked") + List voucherNos = MapUtil.get(map,PayWayExtraCode.VOUCHER_NO_LIST,List.class); List list = new ArrayList<>(); - if (StrUtil.isNotBlank(voucherNo)) { + if (CollUtil.isNotEmpty(voucherNos)){ + list.addAll(voucherNos); + } + else if (StrUtil.isNotBlank(voucherNo)) { list.add(voucherNo); } return JSONUtil.toJsonStr(new VoucherPayParam().setCardNoList(list)); } case WALLET: { - String walletId = map.get(PayWayExtraCode.WALLET_ID); - String userId = map.get(PayWayExtraCode.USER_ID); - WalletPayParam walletPayParam = new WalletPayParam() - .setWalletId(Long.valueOf(walletId)) - .setUserId(Long.valueOf(userId)); + String walletId = MapUtil.getStr(map,PayWayExtraCode.WALLET_ID); + String userId = MapUtil.getStr(map,PayWayExtraCode.USER_ID); + WalletPayParam walletPayParam = new WalletPayParam(); + + if (StrUtil.isNotBlank(walletId)){ + walletPayParam.setWalletId(Long.valueOf(walletId)); + } + + if (StrUtil.isNotBlank(userId)){ + walletPayParam.setUserId(Long.valueOf(userId)); + } return JSONUtil.toJsonStr(walletPayParam); } default: {