完善支付流程,实现异步事件
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
// 不支持的支付方式
|
||||
|
||||
Reference in New Issue
Block a user