替换通道成功权重翻倍

dev_aagame_provider
zhora 1 month ago
parent 755122a852
commit 1204e26e61
  1. 1
      common/recharge.go
  2. 10
      modules/pay/base/base.go
  3. 2
      modules/pay/base/callback.go
  4. 4
      modules/pay/handler.go
  5. 6
      modules/pay/moneydealer/base.go
  6. 6
      modules/pay/moneydealernative/base.go
  7. 2
      modules/pay/timer.go
  8. 5
      modules/pay/values/values.go
  9. 4
      modules/web/handler/recharge.go
  10. 1
      pb/proto/pay.proto

@ -145,6 +145,7 @@ type RechargeOrder struct {
Times int `gorm:"column:times;not null;type:int(11);comment:额度购买次数"` Times int `gorm:"column:times;not null;type:int(11);comment:额度购买次数"`
Scene int `gorm:"column:scene;type:int(11);default:0;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"` 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 { func (r *RechargeOrder) TableName() string {

@ -78,7 +78,7 @@ type Base struct {
QueryWithdrawResp QueryResp QueryWithdrawResp QueryResp
QueryPayResp QueryResp QueryPayResp QueryResp
Sub Sub
SubReq func() ([]byte, error) // 特殊处理一些非常规请求 SubReq func(bool) ([]byte, error) // 特殊处理一些非常规请求
SubCallbackDecode func([]byte) (string, error) // 特殊处理回调解析的方法 SubCallbackDecode func([]byte) (string, error) // 特殊处理回调解析的方法
SignPassStr []string // 不参与签名的字段 SignPassStr []string // 不参与签名的字段
KeyName string // 有时候有些渠道签名字段不一样 KeyName string // 有时候有些渠道签名字段不一样
@ -169,9 +169,9 @@ func (b *Base) PackHeader(header http.Header) {
b.Sub.PackHeader(header) b.Sub.PackHeader(header)
} }
func (b *Base) Req() ([]byte, error) { func (b *Base) Req(isReplace bool) ([]byte, error) {
if b.SubReq != nil { if b.SubReq != nil {
return b.SubReq() return b.SubReq(isReplace)
} }
send := b.Sub.PackReq() send := b.Sub.PackReq()
if send == nil { if send == nil {
@ -196,6 +196,10 @@ func (b *Base) Req() ([]byte, error) {
log.Error("err:%v", err) log.Error("err:%v", err)
return nil, err return nil, err
} }
switch v := ret.(type) {
case *pb.InnerRechargeResp:
v.IsReplace = isReplace
}
data, _ := proto.Marshal(ret) data, _ := proto.Marshal(ret)
return data, nil return data, nil
} }

@ -50,7 +50,7 @@ func (b *Base) PayCallback(c *gin.Context) {
return return
} }
if success { if success {
values.PaySuccess(b.Channel) values.PaySuccess(b.Channel, or.IsReplace)
} }
} }

@ -61,7 +61,7 @@ func Recharge(req *pb.InnerRechargeReq) (ret []byte, err error) {
allpay.NewSub(base, int(req.Channel)) allpay.NewSub(base, int(req.Channel))
start := time.Now() start := time.Now()
if base.Sub != nil { if base.Sub != nil {
ret, err = base.Req() ret, err = base.Req(isReplace)
} else { } else {
ret, err = nil, errors.New("inner error") ret, err = nil, errors.New("inner error")
} }
@ -101,7 +101,7 @@ func Withdraw(req *pb.InnerWithdrawReq) ([]byte, error) {
util.Go(func() { util.Go(func() {
allpay.NewSub(base, int(req.Channel)) allpay.NewSub(base, int(req.Channel))
if base.Sub != nil { if base.Sub != nil {
ret, err = base.Req() ret, err = base.Req(false)
} else { } else {
ret, err = nil, errors.New("inner error") ret, err = nil, errors.New("inner error")
} }

@ -68,7 +68,7 @@ type Sub struct {
Req interface{} Req interface{}
} }
func (s *Sub) SubPayReq() ([]byte, error) { func (s *Sub) SubPayReq(isReplace bool) ([]byte, error) {
send := s.PackReq() send := s.PackReq()
s.Req = send s.Req = send
reqData := s.Base.PackReq(send) reqData := s.Base.PackReq(send)
@ -88,6 +88,10 @@ func (s *Sub) SubPayReq() ([]byte, error) {
log.Error("err:%v", err) log.Error("err:%v", err)
return nil, err return nil, err
} }
switch v := ret.(type) {
case *pb.InnerRechargeResp:
v.IsReplace = isReplace
}
data, _ := proto.Marshal(ret) data, _ := proto.Marshal(ret)
return data, nil return data, nil
} }

@ -68,7 +68,7 @@ type Sub struct {
Req interface{} Req interface{}
} }
func (s *Sub) SubPayReq() ([]byte, error) { func (s *Sub) SubPayReq(isReplace bool) ([]byte, error) {
send := s.PackReq() send := s.PackReq()
s.Req = send s.Req = send
reqData := s.Base.PackReq(send) reqData := s.Base.PackReq(send)
@ -88,6 +88,10 @@ func (s *Sub) SubPayReq() ([]byte, error) {
log.Error("err:%v", err) log.Error("err:%v", err)
return nil, err return nil, err
} }
switch v := ret.(type) {
case *pb.InnerRechargeResp:
v.IsReplace = isReplace
}
data, _ := proto.Marshal(ret) data, _ := proto.Marshal(ret)
return data, nil return data, nil
} }

@ -287,7 +287,7 @@ func TryWithdraw(or *common.WithdrawOrder) {
base := base.NewWithdrawBase(req) base := base.NewWithdrawBase(req)
allpay.NewSub(base, int(req.Channel)) allpay.NewSub(base, int(req.Channel))
if base.Sub != nil { if base.Sub != nil {
ret, err = base.Req() ret, err = base.Req(false)
} else { } else {
ret, err = nil, errors.New("inner error") ret, err = nil, errors.New("inner error")
} }

@ -304,11 +304,14 @@ func PayFail(w PayWay) {
AddPayChannel(int(w), -failWeight) AddPayChannel(int(w), -failWeight)
} }
func PaySuccess(w PayWay) { func PaySuccess(w PayWay, isReplace int) {
successWeight := config.GetConfig().Pay.PaySuccessWeight successWeight := config.GetConfig().Pay.PaySuccessWeight
if successWeight <= 0 { if successWeight <= 0 {
return return
} }
if isReplace == 1 {
successWeight *= 2
}
PayWeightLock.Lock() PayWeightLock.Lock()
for _, v := range call.ConfigPayChannels { for _, v := range call.ConfigPayChannels {
if v.ChannelID == int(w) { if v.ChannelID == int(w) {

@ -445,6 +445,10 @@ func (p *PayImp) Recharge() int {
log.Error("err:%v", err) log.Error("err:%v", err)
return values.CodeRetry return values.CodeRetry
} }
log.Debug("recharge resp, %+v", *resp)
if resp.IsReplace {
p.base.Order.IsReplace = 1
}
p.base.Order.PayChannel = int(resp.Channel) p.base.Order.PayChannel = int(resp.Channel)
} else { } else {
orderID = "USDT" + orderID orderID = "USDT" + orderID

@ -25,6 +25,7 @@ message InnerRechargeResp {
string APIOrderID = 1; // string APIOrderID = 1; //
string URL = 2; // string URL = 2; //
uint32 Channel = 3; // uint32 Channel = 3; //
bool IsReplace = 4; //
} }
message InnerWithdrawReq { message InnerWithdrawReq {

Loading…
Cancel
Save