diff --git a/_doc/Task.md b/_doc/Task.md index a08aa721b..ca7efa87d 100644 --- a/_doc/Task.md +++ b/_doc/Task.md @@ -48,7 +48,10 @@ - 2024-01-11: - [x] (前端) 支付关闭记录 - [x] (前端) 支付修复记录 - - [x] (前端) +- 2024-01-12: + - [x] (前端) 支付订单 + - [ ] (前端) 退款订单 + - [ ] (前端) 微信/支付宝支付通道配置 - **任务池** - [ ] 支付宝方式支持撤销方式, - [ ] 支持转账操作, 通过支付通道专有参数进行实现, 转账时只能单个通道进行操作 diff --git a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/PayOrderController.java b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/PayOrderController.java index 5084accc1..4c5f92c10 100644 --- a/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/PayOrderController.java +++ b/daxpay-single/daxpay-single-admin/src/main/java/cn/bootx/platform/daxpay/admin/controller/order/PayOrderController.java @@ -5,10 +5,15 @@ import cn.bootx.platform.common.core.rest.PageResult; import cn.bootx.platform.common.core.rest.Res; import cn.bootx.platform.common.core.rest.ResResult; import cn.bootx.platform.common.core.rest.param.PageParam; +import cn.bootx.platform.daxpay.param.pay.PayCloseParam; +import cn.bootx.platform.daxpay.param.pay.PaySyncParam; +import cn.bootx.platform.daxpay.result.pay.PaySyncResult; import cn.bootx.platform.daxpay.service.core.order.pay.entity.PayOrder; import cn.bootx.platform.daxpay.service.core.order.pay.service.PayOrderChannelService; import cn.bootx.platform.daxpay.service.core.order.pay.service.PayOrderExtraService; import cn.bootx.platform.daxpay.service.core.order.pay.service.PayOrderService; +import cn.bootx.platform.daxpay.service.core.payment.close.service.PayCloseService; +import cn.bootx.platform.daxpay.service.core.payment.sync.service.PaySyncService; import cn.bootx.platform.daxpay.service.dto.order.pay.PayOrderChannelDto; import cn.bootx.platform.daxpay.service.dto.order.pay.PayOrderDto; import cn.bootx.platform.daxpay.service.dto.order.pay.PayOrderExtraDto; @@ -17,6 +22,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -36,6 +42,9 @@ public class PayOrderController { private final PayOrderExtraService payOrderExtraService; private final PayOrderChannelService payOrderChannelService; + private final PayCloseService PayCloseService; + private final PaySyncService paySyncService; + @Operation(summary = "分页查询") @GetMapping("/page") public ResResult> page(PageParam pageParam, PayOrderQuery param){ @@ -62,4 +71,21 @@ public class PayOrderController { public ResResult> getChannels(Long paymentId){ return Res.ok(payOrderChannelService.findAllByPaymentId(paymentId)); } + + @Operation(summary = "同步支付状态") + @PostMapping("/sync") + public ResResult sync(Long id){ + PaySyncParam param = new PaySyncParam(); + param.setPaymentId(id); + return Res.ok(paySyncService.sync(param)); + } + + @Operation(summary = "关闭支付记录") + @PostMapping("/close") + public ResResult close(Long id){ + PayCloseParam param = new PayCloseParam(); + param.setPaymentId(id); + PayCloseService.close(param); + return Res.ok(); + } } diff --git a/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/pay/PayCommonParam.java b/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/pay/PayCommonParam.java index 7ccf0f439..4f9299019 100644 --- a/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/pay/PayCommonParam.java +++ b/daxpay-single/daxpay-single-core/src/main/java/cn/bootx/platform/daxpay/param/pay/PayCommonParam.java @@ -57,14 +57,4 @@ public abstract class PayCommonParam { @JsonDeserialize(using = TimestampToLocalDateTimeDeserializer.class) private LocalDateTime reqTime; - - /** - * 如果需要进行签名, - * 1. 参数名ASCII码从小到大排序(字典序) - * 2. 如果参数的值为空不参与签名 - * 3. 参数名不区分大小写 - * 4. 嵌套对象转换成先转换成MAP再序列化为字符串 - * 5. 支持两层嵌套, 更多层级嵌套未测试, 可能会导致不可预知的问题 - */ - } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java index 2fd923f11..dea15886e 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/core/payment/sync/service/PaySyncService.java @@ -69,7 +69,7 @@ public class PaySyncService { } // 如果不是异步支付, 直接返回返回 if (!payOrder.isAsyncPay()){ - return new PaySyncResult().setSuccess(true).setRepair(false); + return new PaySyncResult().setSuccess(false).setRepair(false).setErrorMsg("订单没有异步支付方式,不需要同步"); } // 执行订单同步逻辑 return this.syncPayOrder(payOrder); diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderChannelDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderChannelDto.java index 6f4557524..f8d084c17 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderChannelDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderChannelDto.java @@ -16,4 +16,19 @@ import lombok.experimental.Accessors; @Accessors(chain = true) @Schema(title = "支付订单关联通道信息") public class PayOrderChannelDto extends BaseDto { + + @Schema(description = "支付id") + private Long paymentId; + + @Schema(description = "通道") + private String channel; + + @Schema(description = "支付方式") + private String payWay; + + @Schema(description = "异步支付方式") + private boolean async; + + @Schema(description = "金额") + private Integer amount; } diff --git a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderExtraDto.java b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderExtraDto.java index 6936a1edc..032a1fe3e 100644 --- a/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderExtraDto.java +++ b/daxpay-single/daxpay-single-service/src/main/java/cn/bootx/platform/daxpay/service/dto/order/pay/PayOrderExtraDto.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.time.LocalDateTime; + /** * 支付订单扩展信息 * @author xxm @@ -16,4 +18,48 @@ import lombok.experimental.Accessors; @Accessors(chain = true) @Schema(title = "支付订单扩展信息") public class PayOrderExtraDto extends BaseDto { + + /** 描述 */ + @Schema(description = "描述") + private String description; + + /** 支付终端ip */ + @Schema(description = "支付终端ip") + private String clientIp; + + /** 是否不需要异步通知,以最后一次为准 */ + @Schema(description = "是否不需要异步通知") + private boolean notNotify; + + /** 异步通知地址 */ + @Schema(description = "异步通知地址,以最后一次为准") + private String notifyUrl; + + /** 签名类型 */ + @Schema(description = "签名类型") + private String signType; + + /** 签名,以最后一次为准 */ + @Schema(description = "签名") + private String sign; + + /** 商户扩展参数,回调时会原样返回 */ + @Schema(description = "商户扩展参数") + private String attach; + + /** API版本号 */ + @Schema(description = "API版本号") + private String apiVersion; + + /** 请求时间,时间戳转时间, 以最后一次为准 */ + @Schema(description = "请求时间,传输时间戳,以最后一次为准") + private LocalDateTime reqTime; + + /** 错误码 */ + @Schema(description = "错误码") + private String errorCode; + + /** 错误信息 */ + @Schema(description = "错误信息") + private String errorMsg; }