f
This commit is contained in:
@@ -32,22 +32,58 @@ func NewAlipayCallbackLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Al
|
||||
}
|
||||
|
||||
func (l *AlipayCallbackLogic) AlipayCallback(w http.ResponseWriter, r *http.Request) error {
|
||||
notification, err := l.svcCtx.AlipayService.HandleAliPaymentNotification(r)
|
||||
if err != nil {
|
||||
logx.Errorf("支付宝支付回调,%v", err)
|
||||
// 先解析表单,拿到 out_trade_no 用于查找订单和对应商户号
|
||||
if err := r.ParseForm(); err != nil {
|
||||
logx.Errorf("支付宝支付回调,解析请求表单失败: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 根据订单号前缀判断订单类型
|
||||
orderNo := notification.OutTradeNo
|
||||
orderNo := r.FormValue("out_trade_no")
|
||||
if orderNo == "" {
|
||||
logx.Errorf("支付宝支付回调,缺少 out_trade_no")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 根据订单号前缀判断订单类型,并查出对应商户标识
|
||||
var merchant string
|
||||
if strings.HasPrefix(orderNo, "Q_") {
|
||||
// 查询订单处理
|
||||
return l.handleQueryOrderPayment(w, notification)
|
||||
// 查询订单
|
||||
order, err := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, orderNo)
|
||||
if err != nil {
|
||||
logx.Errorf("支付宝支付回调,查询订单失败: %v", err)
|
||||
return nil
|
||||
}
|
||||
merchant = order.PaymentMerchant
|
||||
} else if strings.HasPrefix(orderNo, "A_") {
|
||||
// 代理会员订单处理
|
||||
return l.handleAgentVipOrderPayment(w, notification)
|
||||
// 代理会员订单
|
||||
agentOrder, err := l.svcCtx.AgentMembershipRechargeOrderModel.FindOneByOrderNo(l.ctx, orderNo)
|
||||
if err != nil {
|
||||
logx.Errorf("支付宝支付回调,查询代理会员订单失败: %v", err)
|
||||
return nil
|
||||
}
|
||||
merchant = agentOrder.PaymentMerchant
|
||||
} else {
|
||||
// 兼容旧订单,假设没有前缀的是查询订单
|
||||
order, err := l.svcCtx.OrderModel.FindOneByOrderNo(l.ctx, orderNo)
|
||||
if err != nil {
|
||||
logx.Errorf("支付宝支付回调(旧订单),查询订单失败: %v", err)
|
||||
return nil
|
||||
}
|
||||
merchant = order.PaymentMerchant
|
||||
}
|
||||
|
||||
notification, err := l.svcCtx.AlipayService.HandleAliPaymentNotification(merchant, r.Form)
|
||||
if err != nil {
|
||||
logx.Errorf("支付宝支付回调,验签失败: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 再次根据订单号前缀分发到具体处理函数
|
||||
if strings.HasPrefix(orderNo, "Q_") {
|
||||
return l.handleQueryOrderPayment(w, notification)
|
||||
} else if strings.HasPrefix(orderNo, "A_") {
|
||||
return l.handleAgentVipOrderPayment(w, notification)
|
||||
} else {
|
||||
return l.handleQueryOrderPayment(w, notification)
|
||||
}
|
||||
}
|
||||
@@ -218,9 +254,10 @@ func (l *AlipayCallbackLogic) handleRefund(order *model.AgentMembershipRechargeO
|
||||
return refundErr
|
||||
}
|
||||
} else {
|
||||
// 代理会员订单以创建时间为准,仅 [2026-01-25 16:38:17, 2026-02-02 18:26) 区间内订单走 bak 商户号
|
||||
// 支付宝退款按订单记录的商户号 payment_merchant 走对应商户;
|
||||
// 老订单若未写入商户号,则在 AliRefund 内按时间区间兜底。
|
||||
orderPayTime := order.CreateTime
|
||||
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.OrderNo, order.Amount, &orderPayTime, "")
|
||||
refund, refundErr := l.svcCtx.AlipayService.AliRefund(ctx, order.PaymentMerchant, order.OrderNo, order.Amount, &orderPayTime, "")
|
||||
if refundErr != nil {
|
||||
return refundErr
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user