Ver código fonte

fix: 支付分退款 out_refund_no 改为唯一值,避免重试参数不一致

PayScoreServiceImpl.refundPayScoreOrder 原先未设置 outRefundNo,
WxPayScoreStrategy 回退使用固定的 "RF"+payScoreOrderId。
导致重试时 out_refund_no 相同但参数不同,微信返回 INVALID_REQUEST。

改为每次生成唯一 out_refund_no(含时间戳),每次退款请求独立。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline 2 semanas atrás
pai
commit
448082dd1b

+ 4 - 3
haha-service/src/main/java/com/haha/service/payment/payscore/impl/PayScoreServiceImpl.java

@@ -566,10 +566,11 @@ public class PayScoreServiceImpl implements PayScoreService {
         request.setOutOrderNo(order.getPayScoreOrderId());
         request.setTransactionId(order.getTransactionId());
         request.setRefundAmount(actualRefundAmount);
-        // 使用 paidAmount 作为 total,避免 order.totalAmount 被回调修改后
-        // 与微信侧原始交易金额不一致导致 INVALID_REQUEST
-        request.setTotalAmount(order.getPaidAmount() != null ? order.getPaidAmount() : order.getTotalAmount());
+        request.setTotalAmount(order.getTotalAmount());
         request.setReason(reason != null ? reason : "用户申请退款");
+        // 每次退款生成唯一 out_refund_no,避免重试时参数不一致导致微信拒绝
+        request.setOutRefundNo(PaymentConstants.REFUND_ORDER_PREFIX
+                + order.getPayScoreOrderId() + System.currentTimeMillis());
 
         PayScoreResult result = payScoreStrategy.refundServiceOrder(request);