优化支付流程,扩展产品价格返回字段

This commit is contained in:
2026-06-18 12:15:30 +08:00
parent 9c6b07ad8c
commit 5bb65216a9
9 changed files with 210 additions and 87 deletions

View File

@@ -204,12 +204,7 @@ func (s *tradeService) Create(user *m.User, tradeData *CreateTradeData, productD
// 缓存产品数据
w := bytes.Buffer{}
gob.NewEncoder(&w).Encode(detail)
err = g.Redis.Set(
context.Background(),
tradeProductKey(tradeNo),
w.Bytes(),
expireIn,
).Err()
err = g.Redis.Set(context.Background(), tradeProductKey(tradeNo), w.Bytes(), 0).Err()
if err != nil {
return nil, core.NewServErr("保存购买信息失败", err)
}
@@ -271,7 +266,8 @@ func (s *tradeService) OnCompleteTrade(user *m.User, interNo string, outerNo str
}
// 恢复购买信息;如果反序列化失败,检查开头 init 函数中是否注册了对应的 struct 类型
detailBytes, err := g.Redis.Get(context.Background(), tradeProductKey(interNo)).Bytes()
tradeKey := tradeProductKey(interNo)
detailBytes, err := g.Redis.Get(context.Background(), tradeKey).Bytes()
if err != nil {
return core.NewServErr("恢复购买信息失败", err)
}
@@ -344,6 +340,12 @@ func (s *tradeService) OnCompleteTrade(user *m.User, interNo string, outerNo str
}
}
// 删除缓存
err = g.Redis.Del(context.Background(), tradeKey).Err()
if err != nil {
return core.NewServErr("删除缓存失败", err)
}
return nil
})
if err != nil {
@@ -353,6 +355,23 @@ func (s *tradeService) OnCompleteTrade(user *m.User, interNo string, outerNo str
return nil
}
// 转换交易
func (s *tradeService) ConvertTradeToBalance(admin *m.Admin, ref *TradeRef) error {
trade, err := q.Trade.Where(q.Trade.InnerNo.Eq(ref.TradeNo)).First()
if err != nil {
return err
}
user, err := q.User.Where(q.User.ID.Eq(trade.UserID)).First()
if err != nil {
return err
}
return q.Q.Transaction(func(q *q.Query) error {
return User.UpdateBalance(q, user, trade.Payment, "管理员订单补余额", &admin.ID, nil)
})
}
// 取消交易
func (s *tradeService) CancelTrade(ref *TradeRef) error {
now := time.Now()
@@ -394,7 +413,7 @@ func (s *tradeService) CancelTrade(ref *TradeRef) error {
})
if err != nil {
slog.Debug(fmt.Sprintf("订单无需关闭: %s", err.Error()))
return nil
return ErrTradeStatusIgnored
}
default:
@@ -575,6 +594,12 @@ func (s *tradeService) CheckTrade(ref *TradeRef) (*CheckTradeResult, error) {
return &result, nil
}
// 更新备注
func (s *tradeService) UpdateRemark(tradeNo string, remark string) error {
_, err := q.Trade.Where(q.Trade.InnerNo.Eq(tradeNo)).UpdateColumn(q.Trade.Remark, remark)
return err
}
func tradeProductKey(no string) string {
return fmt.Sprintf("trade:%s:product", no)
}
@@ -639,4 +664,5 @@ func (e TradeErr) Error() string {
var (
ErrTransactionNotSupported = core.NewBizErr("不支持的支付方式")
ErrTradeStatusIgnored = core.NewBizErr("交易状态已忽略")
)