Parcourir la source

fix: 支付分退款 total 使用 paidAmount 避免与微信侧金额不一致

PayScoreServiceImpl.refundPayScoreOrder 原先使用
order.getTotalAmount() 作为退款请求的 total 参数,
但 completePayScoreOrder 的回调可能覆盖 totalAmount,
导致与微信侧原始交易金额不一致,触发 INVALID_REQUEST。

改为优先使用 paidAmount(实际扣费金额),与微信侧记录一致。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline il y a 2 semaines
Parent
commit
ae39904d4a

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

@@ -566,7 +566,9 @@ public class PayScoreServiceImpl implements PayScoreService {
         request.setOutOrderNo(order.getPayScoreOrderId());
         request.setTransactionId(order.getTransactionId());
         request.setRefundAmount(actualRefundAmount);
-        request.setTotalAmount(order.getTotalAmount());
+        // 使用 paidAmount 作为 total,避免 order.totalAmount 被回调修改后
+        // 与微信侧原始交易金额不一致导致 INVALID_REQUEST
+        request.setTotalAmount(order.getPaidAmount() != null ? order.getPaidAmount() : order.getTotalAmount());
         request.setReason(reason != null ? reason : "用户申请退款");
 
         PayScoreResult result = payScoreStrategy.refundServiceOrder(request);