diff --git a/common/recharge.go b/common/recharge.go index c7a3eaf..2d1b936 100644 --- a/common/recharge.go +++ b/common/recharge.go @@ -145,6 +145,7 @@ type RechargeOrder struct { Times int `gorm:"column:times;not null;type:int(11);comment:额度购买次数"` Scene int `gorm:"column:scene;type:int(11);default:0;comment:支付场景"` WithdrawCash int64 `gorm:"column:withdraw_cash;type:bigint(20);default:0;comment:提现扣除的金币" json:"withdraw_cash" redis:"withdraw_cash"` + IsReplace int `gorm:"column:is_replace;not null;default:0;type:int(11);comment:是否替换通道"` } func (r *RechargeOrder) TableName() string { diff --git a/modules/pay/base/base.go b/modules/pay/base/base.go index 5fb6f28..593c8c6 100644 --- a/modules/pay/base/base.go +++ b/modules/pay/base/base.go @@ -78,7 +78,7 @@ type Base struct { QueryWithdrawResp QueryResp QueryPayResp QueryResp Sub - SubReq func() ([]byte, error) // 特殊处理一些非常规请求 + SubReq func(bool) ([]byte, error) // 特殊处理一些非常规请求 SubCallbackDecode func([]byte) (string, error) // 特殊处理回调解析的方法 SignPassStr []string // 不参与签名的字段 KeyName string // 有时候有些渠道签名字段不一样 @@ -169,9 +169,9 @@ func (b *Base) PackHeader(header http.Header) { b.Sub.PackHeader(header) } -func (b *Base) Req() ([]byte, error) { +func (b *Base) Req(isReplace bool) ([]byte, error) { if b.SubReq != nil { - return b.SubReq() + return b.SubReq(isReplace) } send := b.Sub.PackReq() if send == nil { @@ -196,6 +196,10 @@ func (b *Base) Req() ([]byte, error) { log.Error("err:%v", err) return nil, err } + switch v := ret.(type) { + case *pb.InnerRechargeResp: + v.IsReplace = isReplace + } data, _ := proto.Marshal(ret) return data, nil } diff --git a/modules/pay/base/callback.go b/modules/pay/base/callback.go index d453b91..f98a158 100644 --- a/modules/pay/base/callback.go +++ b/modules/pay/base/callback.go @@ -50,7 +50,7 @@ func (b *Base) PayCallback(c *gin.Context) { return } if success { - values.PaySuccess(b.Channel) + values.PaySuccess(b.Channel, or.IsReplace) } } diff --git a/modules/pay/handler.go b/modules/pay/handler.go index 85e4c6c..5e8ddb8 100644 --- a/modules/pay/handler.go +++ b/modules/pay/handler.go @@ -61,7 +61,7 @@ func Recharge(req *pb.InnerRechargeReq) (ret []byte, err error) { allpay.NewSub(base, int(req.Channel)) start := time.Now() if base.Sub != nil { - ret, err = base.Req() + ret, err = base.Req(isReplace) } else { ret, err = nil, errors.New("inner error") } @@ -101,7 +101,7 @@ func Withdraw(req *pb.InnerWithdrawReq) ([]byte, error) { util.Go(func() { allpay.NewSub(base, int(req.Channel)) if base.Sub != nil { - ret, err = base.Req() + ret, err = base.Req(false) } else { ret, err = nil, errors.New("inner error") } diff --git a/modules/pay/moneydealer/base.go b/modules/pay/moneydealer/base.go index d9a0984..4e2385c 100644 --- a/modules/pay/moneydealer/base.go +++ b/modules/pay/moneydealer/base.go @@ -68,7 +68,7 @@ type Sub struct { Req interface{} } -func (s *Sub) SubPayReq() ([]byte, error) { +func (s *Sub) SubPayReq(isReplace bool) ([]byte, error) { send := s.PackReq() s.Req = send reqData := s.Base.PackReq(send) @@ -88,6 +88,10 @@ func (s *Sub) SubPayReq() ([]byte, error) { log.Error("err:%v", err) return nil, err } + switch v := ret.(type) { + case *pb.InnerRechargeResp: + v.IsReplace = isReplace + } data, _ := proto.Marshal(ret) return data, nil } diff --git a/modules/pay/moneydealernative/base.go b/modules/pay/moneydealernative/base.go index 03fafc9..be6e819 100644 --- a/modules/pay/moneydealernative/base.go +++ b/modules/pay/moneydealernative/base.go @@ -68,7 +68,7 @@ type Sub struct { Req interface{} } -func (s *Sub) SubPayReq() ([]byte, error) { +func (s *Sub) SubPayReq(isReplace bool) ([]byte, error) { send := s.PackReq() s.Req = send reqData := s.Base.PackReq(send) @@ -88,6 +88,10 @@ func (s *Sub) SubPayReq() ([]byte, error) { log.Error("err:%v", err) return nil, err } + switch v := ret.(type) { + case *pb.InnerRechargeResp: + v.IsReplace = isReplace + } data, _ := proto.Marshal(ret) return data, nil } diff --git a/modules/pay/timer.go b/modules/pay/timer.go index 2a782db..1074584 100644 --- a/modules/pay/timer.go +++ b/modules/pay/timer.go @@ -287,7 +287,7 @@ func TryWithdraw(or *common.WithdrawOrder) { base := base.NewWithdrawBase(req) allpay.NewSub(base, int(req.Channel)) if base.Sub != nil { - ret, err = base.Req() + ret, err = base.Req(false) } else { ret, err = nil, errors.New("inner error") } diff --git a/modules/pay/values/values.go b/modules/pay/values/values.go index a89a543..0d1ebfe 100644 --- a/modules/pay/values/values.go +++ b/modules/pay/values/values.go @@ -304,11 +304,14 @@ func PayFail(w PayWay) { AddPayChannel(int(w), -failWeight) } -func PaySuccess(w PayWay) { +func PaySuccess(w PayWay, isReplace int) { successWeight := config.GetConfig().Pay.PaySuccessWeight if successWeight <= 0 { return } + if isReplace == 1 { + successWeight *= 2 + } PayWeightLock.Lock() for _, v := range call.ConfigPayChannels { if v.ChannelID == int(w) { diff --git a/modules/web/handler/recharge.go b/modules/web/handler/recharge.go index 9405fa3..710d85c 100644 --- a/modules/web/handler/recharge.go +++ b/modules/web/handler/recharge.go @@ -445,6 +445,10 @@ func (p *PayImp) Recharge() int { log.Error("err:%v", err) return values.CodeRetry } + log.Debug("recharge resp, %+v", *resp) + if resp.IsReplace { + p.base.Order.IsReplace = 1 + } p.base.Order.PayChannel = int(resp.Channel) } else { orderID = "USDT" + orderID diff --git a/pb/proto/pay.proto b/pb/proto/pay.proto index 03d5c52..a9a76bb 100644 --- a/pb/proto/pay.proto +++ b/pb/proto/pay.proto @@ -25,6 +25,7 @@ message InnerRechargeResp { string APIOrderID = 1; // 第三方订单号 string URL = 2; // 支付地址 uint32 Channel = 3; // 支付渠道 + bool IsReplace = 4; // 是否替换渠道 } message InnerWithdrawReq {