完善支付流程,实现异步事件

This commit is contained in:
2026-07-10 17:11:39 +08:00
parent 5d00111887
commit d961538027
6 changed files with 143 additions and 6 deletions

View File

@@ -146,6 +146,7 @@ func (s *tradeService) Create(user *m.User, tradeData *CreateTradeData, productD
Currency: "cny",
ClientIp: "123.52.74.23",
OrderTimeout: u.P(expireAt.Format("2006-01-02 15:04:05")),
NotifyUrl: &env.SftNotifyUrl,
})
if err != nil {
return nil, err
@@ -238,23 +239,47 @@ func (s *tradeService) CompleteTrade(user *m.User, ref *TradeRef) error {
}
}
// 获取交易信息
trade, err := q.Trade.
Preload(q.Trade.User).
Where(q.Trade.InnerNo.Eq(ref.TradeNo)).
Take()
if err != nil {
return core.NewBizErr("获取交易信息失败", err)
}
if trade.User == nil || trade.User.ID != user.ID {
return core.NewBizErr("交易信息不存在")
}
// 更新交易状态
err = s.OnCompleteTrade(user, ref.TradeNo, result.TransId, &result.Success)
err = s.OnCompleteTrade(trade, ref.TradeNo, result.TransId, &result.Success)
if err != nil {
return core.NewServErr("处理交易失败", err)
}
return nil
}
func (s *tradeService) OnCompleteTrade(user *m.User, interNo string, outerNo string, result *TradeSuccessResult) error {
// 获取交易信息
func (s *tradeService) CompleteTradeByNotify(interNo string, outerNo string, result *TradeSuccessResult) error {
trade, err := q.Trade.
Preload(q.Trade.User).
Where(q.Trade.InnerNo.Eq(interNo)).
Take()
if err != nil {
return core.NewBizErr("获取交易信息失败", err)
}
if trade.User == nil {
return core.NewBizErr("交易信息不存在")
}
err = s.OnCompleteTrade(trade, interNo, outerNo, result)
if err != nil {
return core.NewServErr("处理交易失败", err)
}
return nil
}
func (s *tradeService) OnCompleteTrade(trade *m.Trade, interNo string, outerNo string, result *TradeSuccessResult) error {
user := trade.User
// 检查交易状态
switch trade.Status {
@@ -646,7 +671,10 @@ func (s *tradeService) CheckTrade(ref *TradeRef) (*CheckTradeResult, error) {
result.Success.Acquirer = m.TradeAcquirerUnionPay
}
result.Success.Actual = decimal.NewFromInt(resp.Amount).Div(decimal.NewFromInt(100))
result.Success.Time = time.UnixMilli(*resp.PayTime)
result.Success.Time, err = time.Parse("2006-01-02 15:04:05", *resp.PayTime)
if err != nil {
return nil, err
}
}
// 不支持的支付方式