diff --git a/_doc/Task.md b/_doc/Task.md index 8c32accc..d7d3e12b 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -14,7 +14,9 @@ - [x] 去除现金支付和储值卡支付方式 - [x] 三方支付外部订单号规则优化: 支付P、退款R、分账A,根据环境加前缀:DEV_、DEMO_、PRE_ - [ ] 金额显示统一使用元 -- [ ] 使用切面统一处理API调用异常, 做统一包装返回 +- [x] 使用切面统一处理API调用异常, 做统一包装返回 +- [ ] 合并支付通道和通道配置 +- [ ] 支付接口优化 2.0.7: 分账完善和基础架构优化 - [ ] 资金流水优化 diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/system/PayWayInfoController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/system/PayWayInfoController.java index 179211a1..c3556633 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/system/PayWayInfoController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/system/PayWayInfoController.java @@ -3,7 +3,7 @@ package cn.bootx.platform.daxpay.admin.controller.system; import cn.bootx.platform.common.core.rest.Res; import cn.bootx.platform.common.core.rest.ResResult; import cn.bootx.platform.daxpay.service.core.system.payinfo.service.PayWayInfoService; -import cn.bootx.platform.daxpay.service.dto.system.payinfo.PayWayInfoDto; +import cn.bootx.platform.daxpay.service.dto.system.payinfo.PayMethodInfoDto; import cn.bootx.platform.daxpay.service.param.system.payinfo.PayWayInfoParam; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,13 +26,13 @@ public class PayWayInfoController { @Operation(summary = "获取全部") @GetMapping("/findAll") - public ResResult> findAll(){ + public ResResult> findAll(){ return Res.ok(payWayInfoService.findAll()); } @Operation(summary = "根据ID获取") @GetMapping("/findById") - public ResResult findById(Long id){ + public ResResult findById(Long id){ return Res.ok(payWayInfoService.findById(id)); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/ApiInfoLocal.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/ApiInfoLocal.java index 2d733008..b00ea416 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/ApiInfoLocal.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/common/context/ApiInfoLocal.java @@ -26,10 +26,4 @@ public class ApiInfoLocal { /** 响应参数是否签名 */ private boolean resSign; - - /** 回调信息是否签名 */ - private boolean noticeSign; - - /** 是否记录请求的信息 */ - private boolean record; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/result/RefundNoticeResult.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/result/RefundNoticeResult.java index dbd127c5..08d4903d 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/result/RefundNoticeResult.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/result/RefundNoticeResult.java @@ -2,10 +2,12 @@ package cn.bootx.platform.daxpay.service.core.payment.notice.result; import cn.bootx.platform.daxpay.code.PayChannelEnum; import cn.bootx.platform.daxpay.code.RefundStatusEnum; +import cn.bootx.platform.daxpay.result.PaymentCommonResult; import cn.bootx.platform.daxpay.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/2/22 */ +@EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) @Schema(title = "退款通知消息") -public class RefundNoticeResult { +public class RefundNoticeResult extends PaymentCommonResult { /** 退款号 */ @Schema(description = "退款号") @@ -59,8 +62,4 @@ public class RefundNoticeResult { /** 商户扩展参数,回调时会原样返回 */ @Schema(description = "商户扩展参数,回调时会原样返回") private String attach; - - /** 签名 */ - @Schema(description = "签名") - private String sign; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java index 6aab7ae4..c7284de0 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeAssistService.java @@ -7,6 +7,7 @@ import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrderExtra; import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrder; import cn.bootx.platform.daxpay.service.core.order.refund.entity.RefundOrderExtra; +import cn.bootx.platform.daxpay.service.core.payment.common.service.PaymentSignService; import cn.bootx.platform.daxpay.service.core.payment.notice.result.PayNoticeResult; import cn.bootx.platform.daxpay.service.core.payment.notice.result.RefundNoticeResult; import cn.bootx.platform.daxpay.service.core.system.config.entity.PlatformConfig; @@ -30,6 +31,7 @@ import java.util.Objects; public class ClientNoticeAssistService { private final PlatformConfigService configService; + private final PaymentSignService paymentSignService; /** @@ -63,7 +65,8 @@ public class ClientNoticeAssistService { .setContent(JacksonUtil.toJson(payNoticeResult)) .setNoticeType(ClientNoticeTypeEnum.PAY.getType()) .setSendCount(0) - .setOrderId(order.getId()) + .setTradeId(order.getId()) + .setTradeNo(order.getOrderNo()) .setOrderStatus(order.getStatus()); } @@ -71,7 +74,6 @@ public class ClientNoticeAssistService { * 构建出退款通知任务对象 */ public ClientNoticeTask buildRefundTask(RefundOrder order, RefundOrderExtra orderExtra){ - // 创建退款通知内容 RefundNoticeResult payNoticeResult = new RefundNoticeResult() .setRefundNo(order.getRefundNo()) @@ -82,21 +84,16 @@ 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 if (Objects.equals(config.getSignType(), PaySignTypeEnum.HMAC_SHA256.getCode())) { - payNoticeResult.setSign(PaySignUtil.hmacSha256Sign(payNoticeResult,config.getSignSecret())); - } else { - } + paymentSignService.sign(payNoticeResult); return new ClientNoticeTask() .setUrl(orderExtra.getNotifyUrl()) // 时间序列化进行了重写 .setContent(JacksonUtil.toJson(payNoticeResult)) .setNoticeType(ClientNoticeTypeEnum.REFUND.getType()) .setSendCount(0) - .setOrderId(order.getId()) + .setTradeId(order.getId()) + .setTradeNo(order.getRefundNo()) .setOrderStatus(order.getStatus()); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java index 68eb7532..6e6b83c8 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/notice/service/ClientNoticeService.java @@ -91,14 +91,14 @@ public class ClientNoticeService { if (Objects.isNull(orderExtra)){ Optional extraOpt = payOrderExtraManager.findById(order.getId()); if (!extraOpt.isPresent()){ - log.error("未找到支付扩展信息,数据错误,订单ID:{}",order.getId()); + log.error("未找到支付扩展信息,数据错误,订单号:{}",order.getOrderNo()); return; } orderExtra = extraOpt.get(); } // 判断是否需要进行通知 if (StrUtil.isBlank(orderExtra.getNotifyUrl())){ - log.info("支付订单无需通知,订单ID:{}",order.getId()); + log.info("支付订单无需通知,订单号:{}",order.getOrderNo()); return; } @@ -211,7 +211,7 @@ public class ClientNoticeService { .execute(); body = execute.body(); } catch (Exception e) { - log.error("发送通知失败,数据错误,任务ID:{}",task.getOrderId()); + log.error("发送通知失败,数据错误,任务ID:{}",task.getTradeId()); log.error("错误内容",e); record.setErrorMsg(e.getMessage()); } @@ -248,7 +248,7 @@ public class ClientNoticeService { .execute(); body = execute.body(); } catch (Exception e) { - log.error("发送通知失败,数据错误,任务ID:{}",task.getOrderId()); + log.error("发送通知失败,数据错误,任务ID:{}",task.getTradeId()); log.error("错误内容",e); record.setErrorMsg(e.getMessage()); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PayApiConfig.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PayApiConfig.java index e22e7a24..651b5765 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PayApiConfig.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/system/config/entity/PayApiConfig.java @@ -61,12 +61,6 @@ public class PayApiConfig extends MpBaseEntity implements EntityBaseFunction { +@TableName("pay_method_info") +public class PayMethodInfo extends MpBaseEntity implements EntityBaseFunction { /** 需要与系统中配置的枚举一致 */ @DbColumn(comment = "代码") @@ -40,7 +40,7 @@ public class PayWayInfo extends MpBaseEntity implements EntityBaseFunction findAll(){ + public List findAll(){ return manager.findAll().stream() .map(PayWayInfo::toDto) .collect(Collectors.toList()); @@ -38,7 +38,7 @@ public class PayWayInfoService { /** * 单条 */ - public PayWayInfoDto findById(Long id){ + public PayMethodInfoDto findById(Long id){ return ResultConvertUtil.dtoConvert(manager.findById(id)); } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java index 970fc438..1ce3e326 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/task/notice/entity/ClientNoticeTask.java @@ -30,9 +30,13 @@ import java.time.LocalDateTime; @TableName("pay_client_notice_task") public class ClientNoticeTask extends MpBaseEntity implements EntityBaseFunction { - /** 本地订单ID */ - @DbColumn(comment = "本地订单ID") - private Long orderId; + /** 本地交易ID */ + @DbColumn(comment = "本地交易ID") + private Long tradeId; + + /** 本地订单号 */ + @DbColumn(comment = "本地订单号") + private String tradeNo; /** * 消息类型 diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java index ea4f6a9e..5a925979 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/record/notice/ClientNoticeTaskDto.java @@ -20,9 +20,13 @@ import java.time.LocalDateTime; @Schema(title = "消息通知任务") public class ClientNoticeTaskDto extends BaseDto { - /** 本地订单ID */ - @Schema(description = "本地订单ID") - private Long orderId; + /** 本地交易ID */ + @Schema(description = "本地交易ID") + private Long tradeId; + + /** 本地订单号 */ + @Schema(description = "本地订单号") + private String tradeNo; /** * 回调类型 diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/config/PayApiConfigDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/config/PayApiConfigDto.java index 7866d04e..d9e5cdc2 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/config/PayApiConfigDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/config/PayApiConfigDto.java @@ -46,15 +46,6 @@ public class PayApiConfigDto extends BaseDto { @Schema(description = "请求参数是否签名") private boolean reqSign; - @Schema(description = "响应参数是否签名") - private boolean resSign; - - @Schema(description = "回调信息是否签名") - private boolean noticeSign; - - @Schema(description = "是否记录请求的信息") - private boolean record; - @Schema(description = "备注") private String remark; diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/payinfo/PayWayInfoDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/payinfo/PayMethodInfoDto.java similarity index 93% rename from daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/payinfo/PayWayInfoDto.java rename to daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/payinfo/PayMethodInfoDto.java index 06bac698..a2084789 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/payinfo/PayWayInfoDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/system/payinfo/PayMethodInfoDto.java @@ -15,7 +15,7 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) @Schema(title = "支付方式信息") -public class PayWayInfoDto extends BaseDto { +public class PayMethodInfoDto extends BaseDto { /** 需要与系统中配置的枚举一致 */ @Schema(description = "代码") diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/system/config/PayApiConfigParam.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/system/config/PayApiConfigParam.java index 2c94a8db..2e4db4bd 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/system/config/PayApiConfigParam.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/param/system/config/PayApiConfigParam.java @@ -32,9 +32,6 @@ public class PayApiConfigParam { @Schema(description = "响应参数是否签名") private boolean resSign; - @Schema(description = "回调信息是否签名") - private boolean noticeSign; - @Schema(description = "是否记录请求的信息") private boolean record; diff --git a/daxpay-single/daxpay-single-start/src/main/resources/application-dev.yml b/daxpay-single/daxpay-single-start/src/main/resources/application-dev.yml index c3f63d01..96619767 100644 --- a/daxpay-single/daxpay-single-start/src/main/resources/application-dev.yml +++ b/daxpay-single/daxpay-single-start/src/main/resources/application-dev.yml @@ -53,6 +53,10 @@ spring: threadCount: 10 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true +# swagger openapi 接口文档配置 +springdoc: + # 自动展开参数 + default-flat-param-object: true # 开发时显示debug日志 logging: level: