From a1ab481f9698fc49f2ab146c0a310c9b77bf40bd Mon Sep 17 00:00:00 2001 From: DaxPay Date: Fri, 10 May 2024 21:31:08 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=B8=80=E4=BA=9B=E5=B0=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9,=20=E7=AD=BE=E5=90=8D,=20=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3=E7=9B=B8=E5=85=B3=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../daxpay/single/sdk/model/pay/PayModel.java | 1 + .../daxpay/single/sdk/net/DaxPayRequest.java | 1 - .../single/sdk/net/DaxPayResponseModel.java | 14 +++++------- .../single/sdk/param/pay/PayCloseParam.java | 4 +++- .../single/sdk/param/refund/RefundParam.java | 7 +++--- .../single/sdk/response/DaxPayResult.java | 3 --- .../single/sdk/payment/PayCloseOrderTest.java | 3 ++- .../single/sdk/payment/PayOrderTest.java | 12 ++++++++-- .../single/sdk/payment/RefundOrderTest.java | 11 ++++++---- .../cn/daxpay/single/result/DaxResult.java | 3 --- .../single/result/PaymentCommonResult.java | 10 ++++----- .../service/common/context/RefundLocal.java | 5 +++++ .../alipay/service/AliPayRefundService.java | 2 ++ .../union/service/UnionPayRefundService.java | 3 +++ .../close/service/PayCloseService.java | 14 +++++------- .../common/aop/PaymentVerifySignAop.java | 6 +++-- .../common/service/PaymentAssistService.java | 2 +- .../common/service/PaymentSignService.java | 3 +-- .../notice/result/PayNoticeResult.java | 9 ++++---- .../service/ClientNoticeAssistService.java | 22 ++++++------------- .../refund/service/RefundAssistService.java | 16 ++++++++------ 21 files changed, 80 insertions(+), 71 deletions(-) diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/model/pay/PayModel.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/model/pay/PayModel.java index cacf855d9..1d9fa7aaa 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/model/pay/PayModel.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/model/pay/PayModel.java @@ -14,6 +14,7 @@ import lombok.ToString; @Setter @ToString public class PayModel extends DaxPayResponseModel { + /** 商户订单号 */ private String bizOrderNo; diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayRequest.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayRequest.java index fffc9a76a..6db868dfa 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayRequest.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayRequest.java @@ -14,7 +14,6 @@ import lombok.Setter; @Setter public abstract class DaxPayRequest { - /** 客户端ip */ private String clientIp; diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayResponseModel.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayResponseModel.java index 1fa725271..b6c157609 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayResponseModel.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/net/DaxPayResponseModel.java @@ -4,8 +4,6 @@ import lombok.Getter; import lombok.Setter; import lombok.ToString; -import java.time.LocalDateTime; - /** * * @author xxm @@ -16,15 +14,15 @@ import java.time.LocalDateTime; @ToString public abstract class DaxPayResponseModel { - /** 响应数据签名值 */ - private String sign; - - /** 错误码 */ - private String code = "0"; + /** 状态码 */ + private Integer code; /** 错误信息 */ private String msg; /** 响应时间 */ - private LocalDateTime resTime = LocalDateTime.now(); + private Long resTime; + + /** 响应数据签名值 */ + private String sign; } diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/pay/PayCloseParam.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/pay/PayCloseParam.java index d1bc58343..f08834584 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/pay/PayCloseParam.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/pay/PayCloseParam.java @@ -21,7 +21,9 @@ public class PayCloseParam extends DaxPayRequest { private String orderNo; /** 商户订单号 */ - private String bizTradeNo; /** + private String bizTradeNo; + + /** * 方法请求路径 */ @Override diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/refund/RefundParam.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/refund/RefundParam.java index faf3f9902..b62d0fad6 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/refund/RefundParam.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/param/refund/RefundParam.java @@ -42,6 +42,10 @@ public class RefundParam extends DaxPayRequest { /** 退款金额 */ private Integer amount; + + /** 退款原因 */ + private String reason; + /** * 预留的退款扩展参数 * @see AliPayParam @@ -50,9 +54,6 @@ public class RefundParam extends DaxPayRequest { */ private ChannelParam extraParam; - /** 退款原因 */ - private String reason; - /** 商户扩展参数,回调时会原样返回 */ private String attach; diff --git a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/response/DaxPayResult.java b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/response/DaxPayResult.java index 3ead5dc9b..a33f17249 100644 --- a/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/response/DaxPayResult.java +++ b/daxpay-single-sdk/src/main/java/cn/daxpay/single/sdk/response/DaxPayResult.java @@ -24,9 +24,6 @@ public class DaxPayResult { /** 响应体 */ private T data; - /** 数据签名 */ - private String sign; - /** 追踪ID */ private String traceId; } diff --git a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayCloseOrderTest.java b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayCloseOrderTest.java index 8f3ed4951..4dd4507c4 100644 --- a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayCloseOrderTest.java +++ b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayCloseOrderTest.java @@ -31,7 +31,8 @@ public class PayCloseOrderTest { @Test public void close(){ PayCloseParam param = new PayCloseParam(); - param.setBizTradeNo("P0001"); + param.setOrderNo("DEVP24051019404463000001"); + param.setClientIp("127.0.0.1"); DaxPayResult execute = DaxPayKit.execute(param); System.out.println(execute); } diff --git a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayOrderTest.java b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayOrderTest.java index 5137aa853..85a0e5a7d 100644 --- a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayOrderTest.java +++ b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/PayOrderTest.java @@ -1,6 +1,7 @@ package cn.daxpay.single.sdk.payment; import cn.daxpay.single.sdk.code.PayChannelEnum; +import cn.daxpay.single.sdk.code.PayMethodEnum; import cn.daxpay.single.sdk.code.SignTypeEnum; import cn.daxpay.single.sdk.model.pay.PayModel; import cn.daxpay.single.sdk.net.DaxPayConfig; @@ -37,9 +38,16 @@ public class PayOrderTest { param.setClientIp("127.0.0.1"); param.setNotNotify(true); - param.setBizOrderNo("P0004"); + param.setBizOrderNo("SDK_"+ System.currentTimeMillis()); param.setTitle("测试接口支付"); - param.setChannel(PayChannelEnum.ALI.getCode()); + param.setDescription("这是支付备注"); + param.setAmount(1001111); + param.setChannel(PayChannelEnum.UNION_PAY.getCode()); + param.setMethod(PayMethodEnum.QRCODE.getCode()); + param.setAttach("{回调参数}"); + param.setAllocation(false); + param.setReturnUrl("https://abc.com/returnurl"); + param.setNotifyUrl("https://abc.com/callback"); DaxPayResult execute = DaxPayKit.execute(param); System.out.println(execute); diff --git a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/RefundOrderTest.java b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/RefundOrderTest.java index 01f8d9f08..d0e92c2a9 100644 --- a/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/RefundOrderTest.java +++ b/daxpay-single-sdk/src/test/java/cn/daxpay/single/sdk/payment/RefundOrderTest.java @@ -6,6 +6,7 @@ import cn.daxpay.single.sdk.net.DaxPayConfig; import cn.daxpay.single.sdk.net.DaxPayKit; import cn.daxpay.single.sdk.param.refund.RefundParam; import cn.daxpay.single.sdk.response.DaxPayResult; +import cn.daxpay.single.sdk.util.PaySignUtil; import cn.hutool.core.util.RandomUtil; import org.junit.Before; import org.junit.Test; @@ -36,15 +37,17 @@ public class RefundOrderTest { @Test public void refund(){ RefundParam param = new RefundParam(); - param.setClientIp("127.0.0.1"); - param.setBizRefundNo("R" + RandomUtil.randomNumbers(5)); - // 设置具体的退款参数 - param.setAmount(19); + param.setBizOrderNo("SDK_1715341621498"); + param.setAmount(1); + param.setAttach("{回调参数}"); + param.setNotifyUrl("https://abc.com/callback"); + param.setClientIp("127.0.0.1"); DaxPayResult execute = DaxPayKit.execute(param); System.out.println(execute); System.out.println(execute.getData()); + System.out.println(PaySignUtil.verifyHmacSha256Sign(execute.getData(), "123456", execute.getData().getSign())); } } diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/DaxResult.java b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/DaxResult.java index a6becba36..8d252eba7 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/DaxResult.java +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/DaxResult.java @@ -19,9 +19,6 @@ import org.slf4j.MDC; @EqualsAndHashCode(callSuper = true) public class DaxResult extends ResResult { - /** 数据签名 */ - private String sign; - /** 追踪ID */ private String traceId = MDC.get(CommonCode.TRACE_ID); diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/PaymentCommonResult.java b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/PaymentCommonResult.java index 02cd74d72..47aa33c41 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/PaymentCommonResult.java +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/daxpay/single/result/PaymentCommonResult.java @@ -18,11 +18,8 @@ import java.time.LocalDateTime; @Schema(title = "支付通用返回参数") public class PaymentCommonResult { - @Schema(description = "响应数据签名值") - private String sign; - - @Schema(description = "错误码") - private String code = "0"; + @Schema(description = "状态码") + private Integer code = 0; @Schema(description = "错误信息") private String msg; @@ -31,4 +28,7 @@ public class PaymentCommonResult { @JsonSerialize(using = LocalDateTimeToTimestampSerializer.class) private LocalDateTime resTime = LocalDateTime.now(); + @Schema(description = "响应数据签名值") + private String sign; + } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/RefundLocal.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/RefundLocal.java index 0b24626c1..f10981db8 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/RefundLocal.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/common/context/RefundLocal.java @@ -6,6 +6,8 @@ import cn.daxpay.single.service.core.order.refund.entity.RefundOrderExtra; import lombok.Data; import lombok.experimental.Accessors; +import java.time.LocalDateTime; + /** * 异步退款信息 * @author xxm @@ -34,6 +36,9 @@ public class RefundLocal { /** 退款订单 */ private RefundOrder refundOrder; + /** 退款完成时间 */ + private LocalDateTime finishTime; + /** 退款订单扩展 */ private RefundOrderExtra runOrderExtra; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java index 2fd2c3eb1..9d9b1b27e 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/alipay/service/AliPayRefundService.java @@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.Objects; /** @@ -54,6 +55,7 @@ public class AliPayRefundService { // 接口返回fund_change=Y为退款成功,fund_change=N或无此字段值返回时需通过退款查询接口进一步确认退款状态 if (response.getFundChange().equals("Y")){ refundInfo.setStatus(RefundStatusEnum.SUCCESS); + refundInfo.setFinishTime(LocalDateTime.now()); } } catch (AlipayApiException e) { diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/union/service/UnionPayRefundService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/union/service/UnionPayRefundService.java index b5857cff1..586d8248d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/union/service/UnionPayRefundService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/channel/union/service/UnionPayRefundService.java @@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.time.LocalDateTime; /** * 云闪付退款操作 @@ -44,5 +45,7 @@ public class UnionPayRefundService { // 云闪付退款是否成功需要查询状态, 所以设置为退款中状态 RefundLocal refundInfo = PaymentContextLocal.get().getRefundInfo(); refundInfo.setStatus(RefundStatusEnum.PROGRESS).setOutRefundNo(outRefundNo); + // 设置退款时间 + refundInfo.setFinishTime(LocalDateTime.now()); } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/close/service/PayCloseService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/close/service/PayCloseService.java index 819cf354a..3dfd33c34 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/close/service/PayCloseService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/close/service/PayCloseService.java @@ -19,7 +19,6 @@ import com.baomidou.lock.LockTemplate; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.Objects; @@ -43,7 +42,6 @@ public class PayCloseService { /** * 关闭支付 */ - @Transactional(rollbackFor = Exception.class) public PayCloseResult close(PayCloseParam param){ PayOrder payOrder = payOrderQueryService.findByBizOrOrderNo(param.getOrderNo(), param.getBizTradeNo()) .orElseThrow(() -> new PayFailureException("未查询到支付订单")); @@ -63,11 +61,11 @@ public class PayCloseService { */ private PayCloseResult close(PayOrder payOrder) { PayCloseResult result = new PayCloseResult(); + // 状态检查, 只有支付中可以进行取消支付 + if (!Objects.equals(payOrder.getStatus(), PayStatusEnum.PROGRESS.getCode())) { + throw new PayFailureException("订单不是支付中, 无法进行关闭订单"); + } try { - // 状态检查, 只有支付中可以进行取消支付 - if (!Objects.equals(payOrder.getStatus(), PayStatusEnum.PROGRESS.getCode())) { - throw new PayFailureException("订单不是支付中, 无法进行关闭订单"); - } AbsPayCloseStrategy strategy = PayCloseStrategyFactory.create(payOrder.getChannel()); // 设置支付订单 strategy.setOrder(payOrder); @@ -84,8 +82,8 @@ public class PayCloseService { log.error("关闭订单失败:", e); // 记录关闭失败的记录 this.saveRecord(payOrder, false, e.getMessage()); - result.setCode("1").setMsg(e.getMessage()); - return result; + throw new PayFailureException("关闭订单失败"); + } } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/aop/PaymentVerifySignAop.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/aop/PaymentVerifySignAop.java index ba11d725b..fc58c4d13 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/aop/PaymentVerifySignAop.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/aop/PaymentVerifySignAop.java @@ -1,6 +1,5 @@ package cn.daxpay.single.service.core.payment.common.aop; -import cn.bootx.platform.common.core.rest.Res; import cn.bootx.platform.common.core.rest.ResResult; import cn.bootx.platform.common.core.util.ValidationUtil; import cn.daxpay.single.exception.pay.PayFailureException; @@ -8,6 +7,7 @@ import cn.daxpay.single.param.PaymentCommonParam; import cn.daxpay.single.result.PaymentCommonResult; import cn.daxpay.single.service.annotation.PaymentApi; import cn.daxpay.single.service.core.payment.common.service.PaymentSignService; +import cn.daxpay.single.util.DaxRes; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; @@ -49,9 +49,11 @@ public class PaymentVerifySignAop { } catch (PayFailureException ex) { // 如果抛出支付异常, 包裹异常信息, 进行返回 PaymentCommonResult commonResult = new PaymentCommonResult(); + // todo 后期错误码统一管理后, 进行更改 + commonResult.setCode(1); commonResult.setMsg(ex.getMessage()); paymentSignService.sign(commonResult); - return Res.ok(commonResult); + return DaxRes.ok(commonResult); } // 对返回值进行签名 if (proceed instanceof ResResult){ diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentAssistService.java index 8cc498fea..58f971b94 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentAssistService.java @@ -32,7 +32,7 @@ public class PaymentAssistService { /** * 初始化平台配置上下文 */ - private void initPlatform(){ + public void initPlatform(){ PlatformConfig config = platformConfigService.getConfig(); PlatformLocal platform = PaymentContextLocal.get().getPlatformInfo(); platform.setSignType(config.getSignType()); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentSignService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentSignService.java index bf9216f46..e9275b64d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentSignService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/common/service/PaymentSignService.java @@ -60,8 +60,7 @@ public class PaymentSignService { * 对对象进行签名 */ public void sign(PaymentCommonResult result) { - PlatformLocal platformInfo = PaymentContextLocal.get() - .getPlatformInfo(); + PlatformLocal platformInfo = PaymentContextLocal.get().getPlatformInfo(); String signType = platformInfo.getSignType(); if (Objects.equals(PaySignTypeEnum.HMAC_SHA256.getCode(), signType)){ result.setSign(PaySignUtil.hmacSha256Sign(result, platformInfo.getSignSecret())); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/result/PayNoticeResult.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/result/PayNoticeResult.java index 985cb4263..13b78e933 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/result/PayNoticeResult.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/result/PayNoticeResult.java @@ -2,10 +2,12 @@ package cn.daxpay.single.service.core.payment.notice.result; import cn.daxpay.single.code.PayChannelEnum; import cn.daxpay.single.code.PayStatusEnum; +import cn.daxpay.single.result.PaymentCommonResult; import cn.daxpay.single.serializer.LocalDateTimeToTimestampSerializer; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.time.LocalDateTime; @@ -15,10 +17,11 @@ import java.time.LocalDateTime; * @author xxm * @since 2024/1/7 */ +@EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) @Schema(title = "支付异步通知类") -public class PayNoticeResult { +public class PayNoticeResult extends PaymentCommonResult { /** 订单号 */ @Schema(description = "订单号") @@ -73,8 +76,4 @@ public class PayNoticeResult { @Schema(description = "商户扩展参数,回调时会原样返回") private String attach; - /** 签名 */ - @Schema(description = "签名") - private String sign; - } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/service/ClientNoticeAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/service/ClientNoticeAssistService.java index 13fc82fff..ebecff372 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/service/ClientNoticeAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/notice/service/ClientNoticeAssistService.java @@ -1,25 +1,20 @@ package cn.daxpay.single.service.core.payment.notice.service; import cn.bootx.platform.common.jackson.util.JacksonUtil; -import cn.daxpay.single.code.PaySignTypeEnum; import cn.daxpay.single.service.code.ClientNoticeTypeEnum; import cn.daxpay.single.service.core.order.pay.entity.PayOrder; import cn.daxpay.single.service.core.order.pay.entity.PayOrderExtra; import cn.daxpay.single.service.core.order.refund.entity.RefundOrder; import cn.daxpay.single.service.core.order.refund.entity.RefundOrderExtra; +import cn.daxpay.single.service.core.payment.common.service.PaymentAssistService; import cn.daxpay.single.service.core.payment.common.service.PaymentSignService; import cn.daxpay.single.service.core.payment.notice.result.PayNoticeResult; import cn.daxpay.single.service.core.payment.notice.result.RefundNoticeResult; -import cn.daxpay.single.service.core.system.config.entity.PlatformConfig; -import cn.daxpay.single.service.core.system.config.service.PlatformConfigService; import cn.daxpay.single.service.core.task.notice.entity.ClientNoticeTask; -import cn.daxpay.single.util.PaySignUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.Objects; - /** * 客户系统消息通知任务支撑服务 * @author xxm @@ -30,15 +25,16 @@ import java.util.Objects; @RequiredArgsConstructor public class ClientNoticeAssistService { - private final PlatformConfigService configService; private final PaymentSignService paymentSignService; + private final PaymentAssistService paymentAssistService; /** * 构建出支付通知任务对象 */ public ClientNoticeTask buildPayTask(PayOrder order, PayOrderExtra orderExtra){ - + // 获取系统签名 + paymentAssistService.initPlatform(); PayNoticeResult payNoticeResult = new PayNoticeResult() .setOrderNo(order.getOrderNo()) .setBizOrderNo(order.getBizOrderNo()) @@ -52,13 +48,7 @@ public class ClientNoticeAssistService { .setStatus(order.getStatus()) .setAttach(orderExtra.getAttach()); - PlatformConfig config = configService.getConfig(); - // 签名 - if (Objects.equals(config.getSignType(), PaySignTypeEnum.MD5.getCode())){ - payNoticeResult.setSign(PaySignUtil.md5Sign(payNoticeResult,config.getSignSecret())); - } else { - payNoticeResult.setSign(PaySignUtil.hmacSha256Sign(payNoticeResult,config.getSignSecret())); - } + paymentSignService.sign(payNoticeResult); return new ClientNoticeTask() .setUrl(orderExtra.getNotifyUrl()) // 时间序列化进行了重写, 所以使用Jackson的序列化工具类 @@ -74,6 +64,8 @@ public class ClientNoticeAssistService { * 构建出退款通知任务对象 */ public ClientNoticeTask buildRefundTask(RefundOrder order, RefundOrderExtra orderExtra){ + // 获取系统签名 + paymentAssistService.initPlatform(); // 创建退款通知内容 RefundNoticeResult payNoticeResult = new RefundNoticeResult() .setRefundNo(order.getRefundNo()) diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/refund/service/RefundAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/refund/service/RefundAssistService.java index 59999b7f8..8d0116621 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/refund/service/RefundAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/daxpay/single/service/core/payment/refund/service/RefundAssistService.java @@ -25,7 +25,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -89,13 +88,18 @@ public class RefundAssistService { PayStatusEnum.FAIL.getCode()); if (tradesStatus.contains(payOrder.getStatus())) { PayStatusEnum statusEnum = PayStatusEnum.findByCode(payOrder.getStatus()); - throw new PayFailureException("当前订单状态["+statusEnum.getName()+"]不允许发起退款操作"); + throw new PayFailureException("当前支付单订状态["+statusEnum.getName()+"]不允许发起退款操作"); } // 退款号唯一校验 if (StrUtil.isNotBlank(param.getBizRefundNo()) && refundOrderManager.existsByRefundNo(param.getBizRefundNo())){ throw new PayFailureException("退款单号已存在"); } + + // 金额判断 + if (param.getAmount() > payOrder.getRefundableBalance()){ + throw new PayFailureException("退款金额不能大于支付金额"); + } } /** @@ -141,8 +145,8 @@ public class RefundAssistService { .setOutRefundNo(refundInfo.getOutRefundNo()); // 退款成功更新退款时间 if (Objects.equals(refundOrder.getStatus(), SUCCESS.getCode())){ - // TODO 读取网关返回的退款时间和完成时间 - refundOrder.setFinishTime(LocalDateTime.now()); + // 读取网关返回的退款时间和完成时间 + refundOrder.setFinishTime(refundInfo.getFinishTime()); } refundOrderManager.updateById(refundOrder); } @@ -169,9 +173,7 @@ public class RefundAssistService { RefundResult refundResult = new RefundResult(); refundResult.setRefundNo(refundOrder.getRefundNo()) .setBizRefundNo(refundOrder.getBizRefundNo()); - refundResult.setCode(refundOrder.getStatus()) - .setMsg(refundOrder.getErrorMsg()) - .setCode(refundOrder.getErrorCode()); + refundResult.setMsg(refundOrder.getErrorMsg()); // 进行签名 String signType = platformInfo.getSignType();