简化异步任务的交易取消逻辑

This commit is contained in:
2025-06-30 09:56:23 +08:00
parent 7d0bd84649
commit 822ba3d02a
3 changed files with 8 additions and 20 deletions

2
go.mod
View File

@@ -19,7 +19,6 @@ require (
github.com/redis/go-redis/v9 v9.8.0
github.com/shopspring/decimal v1.4.0
github.com/smartwalle/alipay/v3 v3.2.25
github.com/valyala/fasthttp v1.59.0
github.com/wechatpay-apiv3/wechatpay-go v0.2.20
golang.org/x/crypto v0.36.0
gorm.io/driver/postgres v1.5.11
@@ -71,6 +70,7 @@ require (
github.com/spf13/cast v1.7.0 // indirect
github.com/tjfoc/gmsm v1.4.1 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.59.0 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/net v0.37.0 // indirect
golang.org/x/sync v0.12.0 // indirect

View File

@@ -1,7 +1,6 @@
package handlers
import (
"fmt"
"log/slog"
"platform/web/auth"
"platform/web/core"
@@ -121,25 +120,17 @@ func TradeCancelByTask(c *fiber.Ctx) error {
return err
}
// 解析请求参数
// 取消交易
req := new(TradeCheckReq)
if err := c.BodyParser(req); err != nil {
return err
}
// 检查订单状态
err = s.Trade.ConfirmTradeCanceled(&s.CheckTradeData{
TradeNo: req.TradeNo,
Method: req.Method,
})
err = s.Trade.CancelTrade(req.TradeNo, req.Method, time.Now())
if err != nil {
slog.Debug(fmt.Sprintf("订单无需取消:%s", err.Error()))
} else {
err = s.Trade.CancelTrade(req.TradeNo, req.Method, time.Now())
if err != nil {
slog.Warn("取消交易失败", "trade_no", req.TradeNo, "method", req.Method, "error", err)
}
return err
}
return c.SendStatus(fiber.StatusNoContent)
return nil
}

View File

@@ -378,15 +378,12 @@ func (s *tradeService) CancelTrade(tradeNo string, method trade2.Method, now tim
}
case trade2.MethodSft, trade2.MethodSftAlipay, trade2.MethodSftWeChat:
resp, err := g.SFTPay.OrderClose(&g.OrderCloseReq{
_, err := g.SFTPay.OrderClose(&g.OrderCloseReq{
MchOrderNo: &tradeNo,
})
if err != nil {
return err
}
if resp.State != "TRADE_CLOSE" {
slog.Warn("商福通交易取消失败", "state", resp.State)
return errors.New("交易取消失败")
slog.Debug(fmt.Sprintf("订单无需关闭:%s", err.Error()))
return nil
}
default: