f
This commit is contained in:
@@ -53,7 +53,7 @@ type AlipayConfig struct {
|
|||||||
AppCertPath string // 应用公钥证书路径
|
AppCertPath string // 应用公钥证书路径
|
||||||
AlipayCertPath string // 支付宝公钥证书路径
|
AlipayCertPath string // 支付宝公钥证书路径
|
||||||
AlipayRootCertPath string // 根证书路径
|
AlipayRootCertPath string // 根证书路径
|
||||||
// Bak 仅用于 2026-02-02 18:26 之前的订单退款
|
// Bak 仅用于 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单退款
|
||||||
AppIDBak string
|
AppIDBak string
|
||||||
PrivateKeyBak string
|
PrivateKeyBak string
|
||||||
AlipayPublicKeyBak string
|
AlipayPublicKeyBak string
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ func (l *AdminRefundOrderLogic) getAndValidateOrder(orderId int64, refundAmount
|
|||||||
return order, nil
|
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) {
|
func (l *AdminRefundOrderLogic) handleAlipayRefund(order *model.Order, req *types.AdminRefundOrderReq) (*types.AdminRefundOrderResp, error) {
|
||||||
orderPayTime := &order.CreateTime
|
orderPayTime := &order.CreateTime
|
||||||
if order.PayTime.Valid {
|
if order.PayTime.Valid {
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ func (l *AlipayCallbackLogic) handleRefund(order *model.AgentMembershipRechargeO
|
|||||||
return refundErr
|
return refundErr
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 代理会员订单以创建时间为准,2026-02-02 18:26 前的订单走 bak 商户号
|
// 代理会员订单以创建时间为准,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号
|
||||||
orderPayTime := order.CreateTime
|
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 {
|
if refundErr != nil {
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ func (l *WechatPayCallbackLogic) handleRefund(order *model.AgentMembershipRechar
|
|||||||
return refundErr
|
return refundErr
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 代理会员订单以创建时间为准,2026-02-02 18:26 前的订单走 bak 商户号
|
// 代理会员订单以创建时间为准,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号
|
||||||
orderPayTime := order.CreateTime
|
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 {
|
if refundErr != nil {
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ func (l *PaySuccessNotifyUserHandler) handleError(ctx context.Context, err error
|
|||||||
logx.Infof("已发起微信退款申请, orderID: %d, amount: %f", order.Id, order.Amount)
|
logx.Infof("已发起微信退款申请, orderID: %d, amount: %f", order.Id, order.Amount)
|
||||||
return asynq.SkipRetry
|
return asynq.SkipRetry
|
||||||
} else {
|
} else {
|
||||||
// 支付宝退款为同步结果,2026-02-02 18:26 前的订单走 bak 商户号
|
// 支付宝退款为同步结果,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号
|
||||||
orderPayTime := &order.CreateTime
|
orderPayTime := &order.CreateTime
|
||||||
if order.PayTime.Valid {
|
if order.PayTime.Valid {
|
||||||
orderPayTime = &order.PayTime.Time
|
orderPayTime = &order.PayTime.Time
|
||||||
|
|||||||
@@ -16,13 +16,16 @@ import (
|
|||||||
"github.com/smartwalle/alipay/v3"
|
"github.com/smartwalle/alipay/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AlipayBakRefundCutoff bak 支付宝仅用于该时间点之前的订单退款(2026年2月2日 18:26 下午,CST)
|
// bak 支付宝仅用于 [AlipayBakRefundStart, AlipayBakRefundEnd) 区间内支付订单的退款,区间外使用正式 client(CST)
|
||||||
var AlipayBakRefundCutoff = time.Date(2026, 2, 2, 18, 26, 0, 0, time.FixedZone("CST", 8*3600))
|
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 {
|
type AliPayService struct {
|
||||||
config config.AlipayConfig
|
config config.AlipayConfig
|
||||||
AlipayClient *alipay.Client
|
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
|
// NewAliPayService 是一个构造函数,用于初始化 AliPayService
|
||||||
@@ -53,7 +56,7 @@ func NewAliPayService(c config.Config) *AliPayService {
|
|||||||
AlipayClient: client,
|
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 != "" {
|
if c.Alipay.AppIDBak != "" && c.Alipay.PrivateKeyBak != "" {
|
||||||
bakClient, err := alipay.New(c.Alipay.AppIDBak, c.Alipay.PrivateKeyBak, c.Alipay.IsProduction)
|
bakClient, err := alipay.New(c.Alipay.AppIDBak, c.Alipay.PrivateKeyBak, c.Alipay.IsProduction)
|
||||||
if err != nil {
|
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) {
|
func (a *AliPayService) AliRefund(ctx context.Context, outTradeNo string, refundAmount float64, orderPayTime *time.Time) (*alipay.TradeRefundRsp, error) {
|
||||||
client := a.AlipayClient
|
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
|
client = a.AlipayClientBak
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user