This commit is contained in:
2026-02-06 14:12:07 +08:00
parent 33a8baefb7
commit 07bf234b30
5 changed files with 13 additions and 10 deletions

View File

@@ -81,13 +81,12 @@ func (l *AdminRefundOrderLogic) handleAlipayRefund(order *model.Order, req *type
if order.PayTime.Valid {
orderPayTime = &order.PayTime.Time
}
refundResp, err := l.svcCtx.AlipayService.AliRefund(l.ctx, order.OrderNo, req.RefundAmount, orderPayTime)
refundNo := l.generateRefundNo(order.OrderNo)
refundResp, err := l.svcCtx.AlipayService.AliRefund(l.ctx, order.OrderNo, req.RefundAmount, orderPayTime, refundNo)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "AdminRefundOrder, 支付宝退款失败 err: %v", err)
}
refundNo := l.generateRefundNo(order.OrderNo)
if refundResp.IsSuccess() {
// 支付宝退款成功,创建成功记录
err = l.createRefundRecordAndUpdateOrder(order, req, refundNo, refundResp.TradeNo, model.OrderStatusRefunded, model.OrderRefundStatusSuccess)
@@ -188,9 +187,9 @@ func (l *AdminRefundOrderLogic) createRefundRecordOnly(order *model.Order, req *
return nil
}
// generateRefundNo 生成退款单号
// generateRefundNo 生成退款单号(同一订单多次退款需唯一,避免 unique_refund_no 冲突)
func (l *AdminRefundOrderLogic) generateRefundNo(orderNo string) string {
return fmt.Sprintf("%s%s", RefundNoPrefix, orderNo)
return fmt.Sprintf("%s%s-%d", RefundNoPrefix, orderNo, time.Now().UnixMilli())
}
// createNullString 创建 sql.NullString

View File

@@ -220,7 +220,7 @@ func (l *AlipayCallbackLogic) handleRefund(order *model.AgentMembershipRechargeO
} else {
// 代理会员订单以创建时间为准,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号
orderPayTime := order.CreateTime
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount, &orderPayTime)
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount, &orderPayTime, "")
if refundErr != nil {
return refundErr
}

View File

@@ -223,7 +223,7 @@ func (l *WechatPayCallbackLogic) handleRefund(order *model.AgentMembershipRechar
} else {
// 代理会员订单以创建时间为准,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号
orderPayTime := order.CreateTime
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount, &orderPayTime)
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount, &orderPayTime, "")
if refundErr != nil {
return refundErr
}