From 33a8baefb7bb962bf77c68e857f21d0ef09a747b Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Fri, 6 Feb 2026 14:05:53 +0800 Subject: [PATCH] f --- app/main/api/internal/config/config.go | 2 +- .../logic/admin_order/adminrefundorderlogic.go | 2 +- .../internal/logic/pay/alipaycallbacklogic.go | 2 +- .../internal/logic/pay/wechatpaycallbacklogic.go | 2 +- app/main/api/internal/queue/paySuccessNotify.go | 2 +- app/main/api/internal/service/alipayService.go | 16 ++++++++++------ 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/main/api/internal/config/config.go b/app/main/api/internal/config/config.go index 14b9607..51e425f 100644 --- a/app/main/api/internal/config/config.go +++ b/app/main/api/internal/config/config.go @@ -53,7 +53,7 @@ type AlipayConfig struct { AppCertPath string // 应用公钥证书路径 AlipayCertPath string // 支付宝公钥证书路径 AlipayRootCertPath string // 根证书路径 - // Bak 仅用于 2026-02-02 18:26 之前的订单退款 + // Bak 仅用于 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单退款 AppIDBak string PrivateKeyBak string AlipayPublicKeyBak string diff --git a/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go b/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go index 9be6549..26953de 100644 --- a/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go +++ b/app/main/api/internal/logic/admin_order/adminrefundorderlogic.go @@ -75,7 +75,7 @@ func (l *AdminRefundOrderLogic) getAndValidateOrder(orderId int64, refundAmount return order, nil } -// handleAlipayRefund 处理支付宝退款(2026-02-02 18:26 前的订单走 bak 商户号) +// handleAlipayRefund 处理支付宝退款(仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号) func (l *AdminRefundOrderLogic) handleAlipayRefund(order *model.Order, req *types.AdminRefundOrderReq) (*types.AdminRefundOrderResp, error) { orderPayTime := &order.CreateTime if order.PayTime.Valid { diff --git a/app/main/api/internal/logic/pay/alipaycallbacklogic.go b/app/main/api/internal/logic/pay/alipaycallbacklogic.go index 88a532f..b504641 100644 --- a/app/main/api/internal/logic/pay/alipaycallbacklogic.go +++ b/app/main/api/internal/logic/pay/alipaycallbacklogic.go @@ -218,7 +218,7 @@ func (l *AlipayCallbackLogic) handleRefund(order *model.AgentMembershipRechargeO return refundErr } } else { - // 代理会员订单以创建时间为准,2026-02-02 18:26 前的订单走 bak 商户号 + // 代理会员订单以创建时间为准,仅 [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) if refundErr != nil { diff --git a/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go b/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go index 30a0ab1..85b11f5 100644 --- a/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go +++ b/app/main/api/internal/logic/pay/wechatpaycallbacklogic.go @@ -221,7 +221,7 @@ func (l *WechatPayCallbackLogic) handleRefund(order *model.AgentMembershipRechar return refundErr } } else { - // 代理会员订单以创建时间为准,2026-02-02 18:26 前的订单走 bak 商户号 + // 代理会员订单以创建时间为准,仅 [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) if refundErr != nil { diff --git a/app/main/api/internal/queue/paySuccessNotify.go b/app/main/api/internal/queue/paySuccessNotify.go index 2e21b60..bbeddaf 100644 --- a/app/main/api/internal/queue/paySuccessNotify.go +++ b/app/main/api/internal/queue/paySuccessNotify.go @@ -266,7 +266,7 @@ func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error logx.Infof("已发起微信退款申请, orderID: %d, amount: %f", order.Id, order.Amount) return asynq.SkipRetry } else { - // 支付宝退款为同步结果,2026-02-02 18:26 前的订单走 bak 商户号 + // 支付宝退款为同步结果,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号 orderPayTime := &order.CreateTime if order.PayTime.Valid { orderPayTime = &order.PayTime.Time diff --git a/app/main/api/internal/service/alipayService.go b/app/main/api/internal/service/alipayService.go index b6e0044..b201920 100644 --- a/app/main/api/internal/service/alipayService.go +++ b/app/main/api/internal/service/alipayService.go @@ -16,13 +16,16 @@ import ( "github.com/smartwalle/alipay/v3" ) -// AlipayBakRefundCutoff bak 支付宝仅用于该时间点之前的订单退款(2026年2月2日 18:26 下午,CST) -var AlipayBakRefundCutoff = time.Date(2026, 2, 2, 18, 26, 0, 0, time.FixedZone("CST", 8*3600)) +// bak 支付宝仅用于 [AlipayBakRefundStart, AlipayBakRefundEnd) 区间内支付订单的退款,区间外使用正式 client(CST) +var ( + AlipayBakRefundStart = time.Date(2026, 1, 25, 16, 38, 17, 0, time.FixedZone("CST", 8*3600)) // Sun Jan 25 2026 16:38:17 GMT+0800 之前用正式 + AlipayBakRefundEnd = time.Date(2026, 2, 2, 18, 26, 0, 0, time.FixedZone("CST", 8*3600)) // 2026-02-02 18:26 之后用正式 +) type AliPayService struct { config config.AlipayConfig AlipayClient *alipay.Client - AlipayClientBak *alipay.Client // 仅用于 2026-02-02 18:26 前订单的退款 + AlipayClientBak *alipay.Client // 仅用于 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单的退款 } // NewAliPayService 是一个构造函数,用于初始化 AliPayService @@ -53,7 +56,7 @@ func NewAliPayService(c config.Config) *AliPayService { AlipayClient: client, } - // 初始化 bak 支付宝客户端(仅用于 2026-02-02 18:26 前订单的退款) + // 初始化 bak 支付宝客户端(仅用于 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单的退款) if c.Alipay.AppIDBak != "" && c.Alipay.PrivateKeyBak != "" { bakClient, err := alipay.New(c.Alipay.AppIDBak, c.Alipay.PrivateKeyBak, c.Alipay.IsProduction) if err != nil { @@ -140,10 +143,11 @@ func (a *AliPayService) CreateAlipayOrder(ctx context.Context, amount float64, s } } -// AliRefund 发起支付宝退款。orderPayTime 为订单支付时间(或创建时间),若在 2026-02-02 18:26 之前则使用 bak 商户号退款;传 nil 则使用主商户号。 +// AliRefund 发起支付宝退款。orderPayTime 为订单支付时间(或创建时间);仅当落在 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内时使用 bak 商户号,否则使用正式商户号;传 nil 则使用正式商户号。 func (a *AliPayService) AliRefund(ctx context.Context, outTradeNo string, refundAmount float64, orderPayTime *time.Time) (*alipay.TradeRefundRsp, error) { client := a.AlipayClient - if orderPayTime != nil && !orderPayTime.After(AlipayBakRefundCutoff) && a.AlipayClientBak != nil { + if orderPayTime != nil && a.AlipayClientBak != nil && + !orderPayTime.Before(AlipayBakRefundStart) && orderPayTime.Before(AlipayBakRefundEnd) { client = a.AlipayClientBak }