Преглед изворни кода

fix: 补全 PAYSCORE.USER_CANCEL 回调处理

- PayScoreCallbackResult 新增 cancelReason 字段
- parseCallback 解析 cancel_reason(来自微信回调解密数据)
- handlePayScoreCallback 新增 USER_CANCEL 分支:设置 REVOKED 状态
- 同时补充 REVOKED/EXPIRED 状态的回退处理

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline пре 2 недеља
родитељ
комит
b4e38b0bb8

+ 5 - 0
haha-service/src/main/java/com/haha/service/payment/payscore/PayScoreCallbackResult.java

@@ -49,6 +49,11 @@ public class PayScoreCallbackResult {
      * 错误信息
      */
     private String errorMsg;
+
+    /**
+     * 取消原因(PAYSCORE.USER_CANCEL 回调时填充)
+     */
+    private String cancelReason;
     
     public static PayScoreCallbackResult success(String eventType, String outOrderNo, String state) {
         PayScoreCallbackResult result = new PayScoreCallbackResult();

+ 11 - 0
haha-service/src/main/java/com/haha/service/payment/payscore/impl/PayScoreServiceImpl.java

@@ -314,6 +314,17 @@ public class PayScoreServiceImpl implements PayScoreService {
             }
             log.info("[支付分服务] 退款成功回调 - orderId: {}, amount: {}元",
                     order.getId(), result.getTotalAmount());
+        } else if ("PAYSCORE.USER_CANCEL".equals(eventType)) {
+            order.setPayScoreState(PayScoreState.REVOKED.getCode());
+            order.setStatus(OrderStatus.CANCELLED.getCode());
+            order.setPayScoreFailReason(result.getCancelReason() != null
+                    ? result.getCancelReason() : "用户取消");
+            log.info("[支付分服务] 用户取消服务订单 - orderId: {}, reason: {}",
+                    order.getId(), order.getPayScoreFailReason());
+        } else if (PayScoreState.isRevoked(state) || PayScoreState.isExpired(state)) {
+            order.setPayScoreState(state);
+            order.setStatus(OrderStatus.CANCELLED.getCode());
+            log.info("[支付分服务] 订单已取消/过期 - orderId: {}, state: {}", order.getId(), state);
         } else if (PayScoreState.isPaying(state)) {
             // 订单进入 USER_PAYING 状态(扣款已发起但用户尚未完成支付)
             order.setPayScoreState(PayScoreState.USER_PAYING.getCode());

+ 5 - 0
haha-service/src/main/java/com/haha/service/payment/payscore/impl/WxPayScoreStrategy.java

@@ -772,6 +772,11 @@ public class WxPayScoreStrategy implements PayScoreStrategy {
                 result.setPayTime(parsePayTime(paySuccTime));
             }
 
+            // 解析取消原因
+            if (dataJson.has("cancel_reason") && !dataJson.get("cancel_reason").isNull()) {
+                result.setCancelReason(dataJson.get("cancel_reason").asText());
+            }
+
             log.info("[微信支付分] 回调解析成功 - eventType: {}, outOrderNo: {}, state: {}, openId: {}, amount: {}元",
                     eventType, outOrderNo, state, openId, result.getTotalAmount());
             return result;