feat: add PaymentMethod field to TopUp model and enhance payment method validation in topup controllers
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 // 幂等:已成功直接返回
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user