|
|
@@ -540,7 +540,6 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
log.info("[支付分服务] 退款前先确保支付已发起 - orderId: {}", orderId);
|
|
|
PayScoreResult payResult = payScoreStrategy.payServiceOrder(order.getPayScoreOrderId());
|
|
|
if (!payResult.isSuccess()) {
|
|
|
- // /pay 失败可能是已经扣款成功,记录日志后继续尝试退款
|
|
|
log.warn("[支付分服务] /pay 调用未成功(可能已自动扣款),继续尝试退款: code={}, msg={}",
|
|
|
payResult.getErrorCode(), payResult.getErrorMsg());
|
|
|
}
|
|
|
@@ -550,7 +549,27 @@ public class PayScoreServiceImpl implements PayScoreService {
|
|
|
request.setRefundAmount(actualRefundAmount);
|
|
|
request.setReason(reason != null ? reason : "用户申请退款");
|
|
|
|
|
|
- PayScoreResult result = payScoreStrategy.refundServiceOrder(request);
|
|
|
+ // 重试退款:/pay 后支付资源创建可能有延迟,重试最多3次
|
|
|
+ PayScoreResult result = null;
|
|
|
+ for (int i = 0; i < 3; i++) {
|
|
|
+ if (i > 0) {
|
|
|
+ try {
|
|
|
+ Thread.sleep(1000);
|
|
|
+ } catch (InterruptedException ignored) {
|
|
|
+ }
|
|
|
+ log.info("[支付分服务] 退款重试 {}/3 - orderId: {}", i + 1, orderId);
|
|
|
+ }
|
|
|
+ result = payScoreStrategy.refundServiceOrder(request);
|
|
|
+ if (result.isSuccess()) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 404 空body说明支付资源尚未就绪,继续重试
|
|
|
+ if (result.getErrorCode() == null && result.getErrorMsg() == null) {
|
|
|
+ log.warn("[支付分服务] 退款返回空错误(可能支付资源未就绪),准备重试");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
if (result.isSuccess()) {
|
|
|
order.setRefundStatus("REFUNDED");
|