|
|
@@ -12,17 +12,19 @@ import (
|
|
|
)
|
|
|
|
|
|
type TopUp struct {
|
|
|
- Id int `json:"id"`
|
|
|
- UserId int `json:"user_id" gorm:"index"`
|
|
|
- Amount int64 `json:"amount"`
|
|
|
- Money float64 `json:"money"`
|
|
|
- TradeNo string `json:"trade_no" gorm:"unique;type:varchar(255);index"`
|
|
|
- PaymentMethod string `json:"payment_method" gorm:"type:varchar(50)"`
|
|
|
- CreateTime int64 `json:"create_time"`
|
|
|
- CompleteTime int64 `json:"complete_time"`
|
|
|
- Status string `json:"status"`
|
|
|
+ Id int `json:"id"`
|
|
|
+ UserId int `json:"user_id" gorm:"index"`
|
|
|
+ Amount int64 `json:"amount"`
|
|
|
+ Money float64 `json:"money"`
|
|
|
+ TradeNo string `json:"trade_no" gorm:"unique;type:varchar(255);index"`
|
|
|
+ PaymentMethod string `json:"payment_method" gorm:"type:varchar(50)"`
|
|
|
+ CreateTime int64 `json:"create_time"`
|
|
|
+ CompleteTime int64 `json:"complete_time"`
|
|
|
+ Status string `json:"status"`
|
|
|
}
|
|
|
|
|
|
+var ErrPaymentMethodMismatch = errors.New("payment method mismatch")
|
|
|
+
|
|
|
func (topUp *TopUp) Insert() error {
|
|
|
var err error
|
|
|
err = DB.Create(topUp).Error
|
|
|
@@ -74,6 +76,10 @@ func Recharge(referenceId string, customerId string) (err error) {
|
|
|
return errors.New("充值订单不存在")
|
|
|
}
|
|
|
|
|
|
+ if topUp.PaymentMethod != "stripe" {
|
|
|
+ return ErrPaymentMethodMismatch
|
|
|
+ }
|
|
|
+
|
|
|
if topUp.Status != common.TopUpStatusPending {
|
|
|
return errors.New("充值订单状态错误")
|
|
|
}
|
|
|
@@ -325,6 +331,10 @@ func RechargeCreem(referenceId string, customerEmail string, customerName string
|
|
|
return errors.New("充值订单不存在")
|
|
|
}
|
|
|
|
|
|
+ if topUp.PaymentMethod != "creem" {
|
|
|
+ return ErrPaymentMethodMismatch
|
|
|
+ }
|
|
|
+
|
|
|
if topUp.Status != common.TopUpStatusPending {
|
|
|
return errors.New("充值订单状态错误")
|
|
|
}
|
|
|
@@ -396,6 +406,10 @@ func RechargeWaffo(tradeNo string) (err error) {
|
|
|
return errors.New("充值订单不存在")
|
|
|
}
|
|
|
|
|
|
+ if topUp.PaymentMethod != "waffo" {
|
|
|
+ return ErrPaymentMethodMismatch
|
|
|
+ }
|
|
|
+
|
|
|
if topUp.Status == common.TopUpStatusSuccess {
|
|
|
return nil // 幂等:已成功直接返回
|
|
|
}
|