feat: add PaymentMethod field to TopUp model and enhance payment method validation in topup controllers

This commit is contained in:
CaIon
2026-04-15 21:17:49 +08:00
parent b2a40d3381
commit 8aaec8b1cc
4 changed files with 39 additions and 15 deletions
+4
View File
@@ -340,6 +340,10 @@ func EpayNotify(c *gin.Context) {
log.Printf("易支付回调未找到订单: %v", verifyInfo) log.Printf("易支付回调未找到订单: %v", verifyInfo)
return return
} }
if topUp.PaymentMethod == "stripe" || topUp.PaymentMethod == "creem" || topUp.PaymentMethod == "waffo" {
log.Printf("易支付回调订单支付方式不匹配: %s, 订单号: %s", topUp.PaymentMethod, verifyInfo.ServiceTradeNo)
return
}
if topUp.Status == "pending" { if topUp.Status == "pending" {
topUp.Status = "success" topUp.Status = "success"
err := topUp.Update() err := topUp.Update()
+1
View File
@@ -112,6 +112,7 @@ func (*CreemAdaptor) RequestPay(c *gin.Context, req *CreemPayRequest) {
Amount: selectedProduct.Quota, // 充值额度 Amount: selectedProduct.Quota, // 充值额度
Money: selectedProduct.Price, // 支付金额 Money: selectedProduct.Price, // 支付金额
TradeNo: referenceId, TradeNo: referenceId,
PaymentMethod: PaymentMethodCreem,
CreateTime: time.Now().Unix(), CreateTime: time.Now().Unix(),
Status: common.TopUpStatusPending, Status: common.TopUpStatusPending,
} }
+5
View File
@@ -234,6 +234,11 @@ func sessionAsyncPaymentFailed(event stripe.Event) {
return return
} }
if topUp.PaymentMethod != PaymentMethodStripe {
log.Printf("异步支付失败,订单支付方式不匹配: %s, ref: %s", topUp.PaymentMethod, referenceId)
return
}
if topUp.Status != common.TopUpStatusPending { if topUp.Status != common.TopUpStatusPending {
log.Printf("异步支付失败,订单状态非pending: %s, ref: %s", topUp.Status, referenceId) log.Printf("异步支付失败,订单状态非pending: %s, ref: %s", topUp.Status, referenceId)
return return
+14
View File
@@ -23,6 +23,8 @@ type TopUp struct {
Status string `json:"status"` Status string `json:"status"`
} }
var ErrPaymentMethodMismatch = errors.New("payment method mismatch")
func (topUp *TopUp) Insert() error { func (topUp *TopUp) Insert() error {
var err error var err error
err = DB.Create(topUp).Error err = DB.Create(topUp).Error
@@ -74,6 +76,10 @@ func Recharge(referenceId string, customerId string) (err error) {
return errors.New("充值订单不存在") return errors.New("充值订单不存在")
} }
if topUp.PaymentMethod != "stripe" {
return ErrPaymentMethodMismatch
}
if topUp.Status != common.TopUpStatusPending { if topUp.Status != common.TopUpStatusPending {
return errors.New("充值订单状态错误") return errors.New("充值订单状态错误")
} }
@@ -325,6 +331,10 @@ func RechargeCreem(referenceId string, customerEmail string, customerName string
return errors.New("充值订单不存在") return errors.New("充值订单不存在")
} }
if topUp.PaymentMethod != "creem" {
return ErrPaymentMethodMismatch
}
if topUp.Status != common.TopUpStatusPending { if topUp.Status != common.TopUpStatusPending {
return errors.New("充值订单状态错误") return errors.New("充值订单状态错误")
} }
@@ -396,6 +406,10 @@ func RechargeWaffo(tradeNo string) (err error) {
return errors.New("充值订单不存在") return errors.New("充值订单不存在")
} }
if topUp.PaymentMethod != "waffo" {
return ErrPaymentMethodMismatch
}
if topUp.Status == common.TopUpStatusSuccess { if topUp.Status == common.TopUpStatusSuccess {
return nil // 幂等:已成功直接返回 return nil // 幂等:已成功直接返回
} }