f ‘部分退款’

This commit is contained in:
2026-01-20 20:18:46 +08:00
parent ed8d311e02
commit 3dcef00566
10 changed files with 166 additions and 98 deletions

View File

@@ -247,33 +247,23 @@ func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error
// 退款
if order.PaymentPlatform == "wechat" {
// 微信退款为异步结果,这里只发起退款申请,订单状态与佣金/钱包扣减交由退款回调统一处理
refundErr := l.svcCtx.WechatPayService.WeChatRefund(ctx, order.OrderNo, order.Amount, order.Amount)
if refundErr != nil {
logx.Error(refundErr)
return asynq.SkipRetry
}
// 微信退款成功,更新订单、佣金、钱包状态
logx.Infof("微信退款成功, orderID: %d", order.Id)
// 更新订单状态为退款
order.Status = "refunded"
updateOrderErr := l.svcCtx.OrderModel.UpdateWithVersion(ctx, nil, order)
if updateOrderErr != nil {
logx.Errorf("更新订单状态失败订单ID: %d, 错误: %v", order.Id, updateOrderErr)
return fmt.Errorf("更新订单状态失败: %v", updateOrderErr)
}
// 使用公共函数处理佣金和钱包扣除
paylogic.HandleCommissionAndWalletDeduction(ctx, l.svcCtx, nil, order)
logx.Infof("已发起微信退款申请, orderID: %d, amount: %f", order.Id, order.Amount)
return asynq.SkipRetry
} else {
// 支付宝退款为同步结果,这里直接根据返回结果更新订单和佣金/钱包
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount)
if refundErr != nil {
logx.Error(refundErr)
return asynq.SkipRetry
}
if refund.IsSuccess() {
logx.Errorf("支付宝退款成功, orderID: %d", order.Id)
logx.Infof("支付宝退款成功, orderID: %d", order.Id)
// 更新订单状态为退款
order.Status = "refunded"
updateOrderErr := l.svcCtx.OrderModel.UpdateWithVersion(ctx, nil, order)
@@ -282,8 +272,8 @@ func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error
return fmt.Errorf("更新订单状态失败: %v", updateOrderErr)
}
// 使用公共函数处理佣金和钱包扣除
paylogic.HandleCommissionAndWalletDeduction(ctx, l.svcCtx, nil, order)
// 使用公共函数按本次退款金额处理佣金和钱包扣除
_ = paylogic.HandleCommissionAndWalletDeduction(ctx, l.svcCtx, nil, order, order.Amount)
return asynq.SkipRetry
} else {