From d716c00c8465eb35cb8bba8ef65407b8fdec5b69 Mon Sep 17 00:00:00 2001 From: qiube <18969599531@163.com> Date: Fri, 19 Dec 2025 10:00:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(pay):=20=E4=BC=98=E5=8C=96=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=9B=9E=E8=B0=83=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 统一回调响应格式,使用 Result 封装返回数据 - 引入枚举类管理订单状态和记录类型 - 替换硬编码字符串为常量和枚举值 - 完善异常处理,使用 BusinessException 统一抛出业务异常 - 优化状态映射逻辑,增强空值判断与默认值处理 - 规范化代码结构,提升可读性和维护性 --- .../mtpay/controller/CallbackController.java | 21 ++++++---------- .../service/impl/CallbackServiceImpl.java | 25 +++++++++++++------ .../service/impl/PaymentOrderServiceImpl.java | 13 ++++++---- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/controller/CallbackController.java b/mt-pay/src/main/java/com/mtkj/mtpay/controller/CallbackController.java index 1512d3f..689aec8 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/controller/CallbackController.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/controller/CallbackController.java @@ -1,5 +1,6 @@ package com.mtkj.mtpay.controller; +import com.mtkj.mtpay.common.Result; import com.mtkj.mtpay.service.CallbackService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -24,21 +25,15 @@ public class CallbackController { * PingPong支付回调接口 */ @PostMapping("/pingpong") - public ResponseEntity> pingpongCallback(@RequestBody Map callbackData) { + public ResponseEntity> pingpongCallback(@RequestBody Map callbackData) { log.info("收到PingPong回调通知"); - try { - boolean success = callbackService.handleCallback(callbackData); - - if (success) { - return ResponseEntity.ok(Map.of("code", "0000", "message", "success")); - } else { - return ResponseEntity.badRequest().body(Map.of("code", "9999", "message", "处理失败")); - } - - } catch (Exception e) { - log.error("处理回调失败", e); - return ResponseEntity.badRequest().body(Map.of("code", "9999", "message", "处理异常: " + e.getMessage())); + boolean success = callbackService.handleCallback(callbackData); + + if (success) { + return ResponseEntity.ok(Result.success("回调处理成功")); + } else { + return ResponseEntity.ok(Result.fail("回调处理失败")); } } diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CallbackServiceImpl.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CallbackServiceImpl.java index 390b804..37755a3 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CallbackServiceImpl.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/CallbackServiceImpl.java @@ -1,6 +1,8 @@ package com.mtkj.mtpay.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; +import com.mtkj.mtpay.common.enums.OrderStatus; +import com.mtkj.mtpay.common.enums.RecordType; import com.mtkj.mtpay.entity.PaymentOrder; import com.mtkj.mtpay.entity.PaymentRecord; import com.mtkj.mtpay.mapper.PaymentOrderMapper; @@ -79,7 +81,7 @@ public class CallbackServiceImpl implements CallbackService { PaymentRecord record = new PaymentRecord(); record.setMerchantTransactionId(merchantTransactionId); record.setTransactionId(transactionId); - record.setRecordType("CALLBACK"); + record.setRecordType(RecordType.CALLBACK.getCode()); record.setCode(code); record.setDescription(description); record.setStatus(status); @@ -102,17 +104,24 @@ public class CallbackServiceImpl implements CallbackService { * 将回调状态映射到订单状态 */ private String mapCallbackStatusToOrderStatus(String callbackStatus) { - return switch (callbackStatus.toUpperCase()) { - case "SUCCESS", "SUCCESSFUL" -> "SUCCESS"; - case "FAILED", "FAILURE" -> "FAILED"; - case "REVIEW" -> "REVIEW"; - case "CANCELLED", "CANCEL" -> "CANCELLED"; - case "PENDING" -> "PENDING"; + if (callbackStatus == null || callbackStatus.isEmpty()) { + return OrderStatus.PENDING.getCode(); + } + + String upperStatus = callbackStatus.toUpperCase(); + OrderStatus orderStatus = switch (upperStatus) { + case "SUCCESS", "SUCCESSFUL" -> OrderStatus.SUCCESS; + case "FAILED", "FAILURE" -> OrderStatus.FAILED; + case "REVIEW" -> OrderStatus.REVIEW; + case "CANCELLED", "CANCEL" -> OrderStatus.CANCELLED; + case "PENDING" -> OrderStatus.PENDING; default -> { log.warn("未知的回调状态: {}", callbackStatus); - yield "PENDING"; + yield OrderStatus.PENDING; } }; + + return orderStatus.getCode(); } /** diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java index 0c3a953..c1ed0be 100644 --- a/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java +++ b/mt-pay/src/main/java/com/mtkj/mtpay/service/impl/PaymentOrderServiceImpl.java @@ -1,9 +1,12 @@ package com.mtkj.mtpay.service.impl; +import com.mtkj.mtpay.common.ResultCode; +import com.mtkj.mtpay.common.constants.PaymentConstants; import com.mtkj.mtpay.dto.request.CheckoutRequestDTO; import com.mtkj.mtpay.dto.response.CheckoutResponseDTO; import com.mtkj.mtpay.entity.PaymentOrder; import com.mtkj.mtpay.entity.PaymentRecord; +import com.mtkj.mtpay.exception.BusinessException; import com.mtkj.mtpay.mapper.PaymentOrderMapper; import com.mtkj.mtpay.mapper.PaymentRecordMapper; import com.mtkj.mtpay.service.PaymentOrderService; @@ -38,7 +41,7 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { request.getMerchantTransactionId() ); if (existingOrder.isPresent()) { - throw new RuntimeException("商户订单号已存在: " + request.getMerchantTransactionId()); + throw new BusinessException(ResultCode.ORDER_EXISTS); } // 创建订单实体 @@ -53,13 +56,13 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { order.setShopperCancelUrl(request.getShopperCancelUrl()); order.setNotificationUrl(request.getNotificationUrl()); order.setRemark(request.getRemark()); - order.setStatus("PENDING"); + order.setStatus(PaymentConstants.DEFAULT_ORDER_STATUS); // 调用PingPong API创建支付 CheckoutResponseDTO response = pingPongPayService.checkout(request); // 更新订单信息 - if ("001000".equals(response.getCode())) { + if (PaymentConstants.PINGPONG_SUCCESS_CODE.equals(response.getCode())) { // transactionId在回调中返回,这里先不设置 order.setClientId(response.getClientId()); order.setAccId(response.getAccId()); @@ -77,7 +80,7 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { PaymentRecord record = new PaymentRecord(); record.setMerchantTransactionId(order.getMerchantTransactionId()); record.setTransactionId(order.getTransactionId()); - record.setRecordType("CHECKOUT"); + record.setRecordType(com.mtkj.mtpay.common.enums.RecordType.CHECKOUT.getCode()); record.setCode(response.getCode()); record.setDescription(response.getDescription()); record.setStatus(order.getStatus()); @@ -103,7 +106,7 @@ public class PaymentOrderServiceImpl implements PaymentOrderService { public PaymentOrder updateOrderStatus(String merchantTransactionId, String status, String transactionId) { Optional orderOpt = paymentOrderMapper.findByMerchantTransactionId(merchantTransactionId); if (orderOpt.isEmpty()) { - throw new RuntimeException("订单不存在: " + merchantTransactionId); + throw new BusinessException(ResultCode.ORDER_NOT_FOUND); } PaymentOrder order = orderOpt.get();