Compare commits

...

15 Commits

Author SHA1 Message Date
mofangmin 017d79fe72 功能添加 1 year ago
mofangmin eef18c22d3 支付需求开发 1 year ago
mofangmin d51ee18677 支付修改 1 year ago
mofangmin 89adb1779f 更新 1 year ago
mofangmin 115b1ff269 Merge branch 'dev' into release 1 year ago
mofangmin 621ddcab3b 折扣券配置 1 year ago
mofangmin 2ceda14a75 Grepay修改 1 year ago
mofangmin b91faa35de 概率调整 1 year ago
mofangmin c166294255 自动建表 1 year ago
mofangmin c6fc03ebdb Merge branch 'dev' into release 1 year ago
mofangmin 57f6772b52 PG厂商放开 1 year ago
mofangmin ae4286c1f1 Merge branch 'dev' into release 1 year ago
mofangmin e4e80338f1 修复提现 1 year ago
mofangmin aad595cdc7 单位处理 1 year ago
mofangmin 76db6eae6f 新增agropay 1 year ago
  1. 16
      call/config.go
  2. 11
      call/pay.go
  3. 60
      call/redis.go
  4. 75
      call/share.go
  5. 11
      call/user.go
  6. 26
      common/activity.go
  7. 10
      common/config.go
  8. 1
      common/currency.go
  9. 7
      common/recharge.go
  10. 16
      common/redis_keys.go
  11. 23
      common/share.go
  12. 1
      modules/backend/handler/examine/examine.go
  13. 4
      modules/backend/handler/guser/getGameUserInfo.go
  14. 1
      modules/backend/migrate.go
  15. 2
      modules/common/nats.go
  16. 178
      modules/pay/agropay/base.go
  17. 176
      modules/pay/agropay/values.go
  18. 3
      modules/pay/allpay/all.go
  19. 2
      modules/pay/base/callback.go
  20. 4
      modules/pay/gopay/values.go
  21. 4
      modules/pay/grepay/values.go
  22. 25
      modules/pay/mlpay/base.go
  23. 155
      modules/pay/values/values.go
  24. 35
      modules/web/handler/activity.go
  25. 19
      modules/web/handler/firstpage.go
  26. 20
      modules/web/handler/game.go
  27. 47
      modules/web/handler/recharge.go
  28. 89
      modules/web/handler/share.go
  29. 3
      modules/web/providers/jili2/base.go
  30. 1
      modules/web/providers/jili2/handler.go
  31. 10
      modules/web/providers/jili2/values.go
  32. 3
      modules/web/providers/pg2/base.go
  33. 2
      modules/web/providers/pg2/handler.go
  34. 7
      modules/web/providers/pg2/values.go
  35. 2
      modules/web/routers/routers_activity.go
  36. 1
      modules/web/routers/routers_share.go
  37. 18
      modules/web/values/activity.go
  38. 23
      modules/web/values/share.go

@ -732,7 +732,21 @@ func GetConfigGameList(num int, cond ...int) []*common.ConfigGameList {
if v.GameProvider == common.ProviderPG2 || v.GameProvider == common.ProviderJiLi2 { if v.GameProvider == common.ProviderPG2 || v.GameProvider == common.ProviderJiLi2 {
continue continue
} }
ret = append(ret, v) provider := -1
if v.GameProvider == common.ProviderJili {
provider = common.ProviderJiLi2
} else if v.GameProvider == common.ProviderPGSoft {
provider = common.ProviderPG2
}
if provider != -1 {
game := GetConfigGameListByGameID(provider, v.GameID)
if game != nil {
ret = append(ret, v)
continue
}
} else {
ret = append(ret, v)
}
} }
sort.Slice(ret, func(i, j int) bool { sort.Slice(ret, func(i, j int) bool {
return ret[i].Sort > ret[j].Sort return ret[i].Sort > ret[j].Sort

@ -84,7 +84,7 @@ func Withdraw(data *pb.InnerWithdrawReq) (*pb.InnerWithdrawResp, error) {
// CheckUserBet 检测玩家余额 // CheckUserBet 检测玩家余额
func CheckUserBet(uid int, t common.CurrencyType) { func CheckUserBet(uid int, t common.CurrencyType) {
cash := GetUserCurrency(uid, t) cash := GetUserCurrency(uid, t)
if cash < config.GetConfig().Web.BreakLimit { if cash < GetConfigPlatform().MiniAmount {
_, err := db.Mysql().UpdateRes(&common.PlayerProfile{UID: uid}, map[string]interface{}{"need_bet": 0}) _, err := db.Mysql().UpdateRes(&common.PlayerProfile{UID: uid}, map[string]interface{}{"need_bet": 0})
if err != nil { if err != nil {
log.Error("err:%v", err) log.Error("err:%v", err)
@ -232,7 +232,7 @@ func RechargeCallback(r *common.RechargeOrder, success bool, payAccount, extra s
if r.ProductID == 0 { if r.ProductID == 0 {
ticket := GetConfigDiscountTicketByAmount(discountOriginAmount) ticket := GetConfigDiscountTicketByAmount(discountOriginAmount)
log.Info("ticket:%v", ticket) log.Info("ticket:%v", ticket)
if ticket.Id > 0 { if ticket.ID > 0 {
// 赠送优惠券 // 赠送优惠券
tickets := GetConfigDiscountTicket() tickets := GetConfigDiscountTicket()
sort.Slice(tickets, func(i, j int) bool { sort.Slice(tickets, func(i, j int) bool {
@ -257,9 +257,9 @@ func RechargeCallback(r *common.RechargeOrder, success bool, payAccount, extra s
if val < ticket.CurProb { if val < ticket.CurProb {
AddUserDiscountTicket(uid, ticket.DiscountAmount, ticket.RechargeAmount, -1, 0, true) AddUserDiscountTicket(uid, ticket.DiscountAmount, ticket.RechargeAmount, -1, 0, true)
SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits)) SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits))
} else if nextTicket.Id > 0 { } else if nextTicket.ID > 0 {
AddUserDiscountTicket(uid, nextTicket.DiscountAmount, nextTicket.RechargeAmount, -1, 1, true) AddUserDiscountTicket(uid, nextTicket.DiscountAmount, nextTicket.RechargeAmount, -1, 1, true)
SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits)) SendMailWithContent(uid, SystemTitle, fmt.Sprintf(EmailDiscount, nextTicket.DiscountAmount/common.DecimalDigits, nextTicket.RechargeAmount/common.DecimalDigits))
} }
} }
} }
@ -511,9 +511,8 @@ func PayActivity(r *common.RechargeOrder, notCharge bool, user *common.PlayerDBI
// 更新loginrecord // 更新loginrecord
if notCharge { if notCharge {
InsertLoginRecord(r.UID, r.ChannelID, user.IP, user.Birth, user.Platform) InsertLoginRecord(r.UID, r.ChannelID, user.IP, user.Birth, user.Platform)
CheckShare(r)
} }
CheckShare(r)
return nil return nil
} }

@ -0,0 +1,60 @@
package call
import (
"context"
"fmt"
"server/db"
"time"
)
// AddChannel 添加渠道
func AddChannel(channelID int, isSuccess bool) {
ctx := context.Background()
client := db.Redis().GetRedis()
totalKey := fmt.Sprintf("channel_total_%v", channelID)
successKey := fmt.Sprintf("channel_success_%v", channelID)
// 检查键是否存在,如果不存在则设置过期时间
if client.Exists(ctx, totalKey).Val() == 0 {
client.Set(ctx, totalKey, 0, 10*time.Minute)
}
if client.Exists(ctx, successKey).Val() == 0 {
client.Set(ctx, successKey, 0, 10*time.Minute)
}
// 增加总订单数
client.Incr(ctx, totalKey)
// 如果订单成功,增加成功订单数
if isSuccess {
client.Incr(ctx, successKey)
}
}
// GetChannelStatus 获取渠道状态
func GetChannelStatus(channelID int) int {
ctx := context.Background()
client := db.Redis().GetRedis()
totalKey := fmt.Sprintf("channel_total_%v", channelID)
successKey := fmt.Sprintf("channel_success_%v", channelID)
totalOrders, _ := client.Get(ctx, totalKey).Int64()
successOrders, _ := client.Get(ctx, successKey).Int64()
// 如果总订单数小于10,状态为绿色
if totalOrders < 10 {
return 1
}
// 根据成功订单数判断渠道状态
if successOrders >= 5 {
return 1
} else if successOrders >= 3 {
return 2
} else {
return 3
}
}

@ -82,20 +82,77 @@ func ShareBind(share string, isOld bool, uid, cid int) {
// 判断分享,发放有效用户奖励 // 判断分享,发放有效用户奖励
func CheckShare(r *common.RechargeOrder) { func CheckShare(r *common.RechargeOrder) {
shareInfo := GetShareInfo(r.UID)
reward := GetConfigShareSys().ShareReward reward := GetConfigShareSys().ShareReward
if r.Amount < GetConfigShareSys().ShareRecharge { // 付费分享
// CheckShareTask(shareInfo.UP1, 1, common.TaskTypePayShare)
// 发放奖励
update := map[string]interface{}{
"recharge_amount": gorm.Expr("recharge_amount + ?", r.Amount),
}
if shareInfo.BetAmount != -1 {
update["bet_amount"] = gorm.Expr("bet_amount + ?", r.Amount)
}
db.Mysql().Update(&common.ShareInfo{UID: r.UID}, update)
betAmount := shareInfo.BetAmount
if betAmount == -1 {
betAmount = 0
}
if shareInfo.RechargeAmount+r.Amount < GetConfigShareSys().ShareRecharge {
return return
} }
share := GetShareInfo(r.UID) if shareInfo.UP1 == 0 {
if share.UP1 == 0 {
return return
} }
// 发放奖励 if shareInfo.BetAmount >= 0 {
db.Mysql().Update(&common.ShareInfo{UID: share.UP1}, map[string]interface{}{ db.Mysql().Update(&common.ShareInfo{UID: r.UID}, map[string]interface{}{
"invalid_invites": gorm.Expr("invalid_invites + 1"), "bet_amount": -1,
"invite_reward": gorm.Expr("invite_reward + ?", reward), })
"available_reward": gorm.Expr("available_reward + ?", reward), update = map[string]interface{}{
}) "invalid_invites": gorm.Expr("invalid_invites + 1"),
"invite_reward": gorm.Expr("invite_reward + ?", reward),
"available_reward": gorm.Expr("available_reward + ?", reward),
}
db.Mysql().Update(&common.ShareInfo{UID: shareInfo.UP1}, update)
}
ShareRecharge(r.UID, r.Amount+betAmount)
}
func ShareRecharge(uid int, amount int64) {
shareInfo := &common.ShareInfo{UID: uid}
db.Mysql().Get(shareInfo)
if shareInfo.UP1 == 0 {
return
}
ref := reflect.ValueOf(shareInfo).Elem()
// 循环查询上级
for i := 1; i <= 3; i++ {
upUid := int(ref.FieldByName(fmt.Sprintf("UP%d", i)).Int())
if upUid == 0 {
break
}
con := GetConfigShareByLevel(i)
if con == nil {
log.Error("unknown config share level:%v", i)
continue
}
// 发奖
reward := amount * con.Per / 1000
if reward <= 0 {
continue
}
db.Mysql().Update(&common.ShareInfo{UID: upUid}, map[string]interface{}{
"bet_reward": gorm.Expr("bet_reward + ?", reward),
"available_reward": gorm.Expr("available_reward + ?", reward),
})
db.Mysql().Create(&common.ShareDetail{
UID: uid,
Up: upUid,
RechargeAmount: amount,
Reward: reward,
Time: time.Now().Unix(),
})
}
} }
// 投注奖励结算 // 投注奖励结算

@ -800,12 +800,13 @@ func GetRtpControl(uid int) int {
// 2.个控 // 2.个控
// 3.大盘 // 3.大盘
rtp := GetConfigPlatform().Rtp rtp := GetConfigPlatform().Rtp
if rtpData.Id > 0 { if rtpData.Id > 0 && rtpData.Rtp > 0 {
rtp = rtpData.Rtp rtp = rtpData.Rtp
} } else {
if rtp > 0 && rtpConf.Id > 0 { if rtpConf.ID > 0 {
if withdrawRechargePer >= int64(rtpConf.EnterPer) && withdrawRechargePer <= int64(rtpConf.ExitPer) { if withdrawRechargePer >= int64(rtpConf.EnterPer) && withdrawRechargePer <= int64(rtpConf.ExitPer) {
rtp = rtpConf.Rtp rtp = rtpConf.Rtp
}
} }
} }
return rtp return rtp

@ -307,8 +307,8 @@ func (c *ConfigActivityBreakGift) TableName() string {
type ConfigActivityWeekCard struct { type ConfigActivityWeekCard struct {
ID int `gorm:"primarykey"` ID int `gorm:"primarykey"`
DayOneReward int64 `gorm:"column:day_one_reward;type:bigint(20);default:0;comment:第一天奖励" web:"day_one_reward"` // 下限 DayOneReward int64 `gorm:"column:day_one_reward;type:bigint(20);default:0;comment:第一天奖励" web:"day_one_reward"` // 下限
MiniLimit int64 `gorm:"column:mini_limit;type:bigint(20);default:0;comment:下限" web:"mini_limit"` // 下限 MiniLimit int64 `gorm:"column:mini_limit;type:bigint(20);default:0;comment:下限" web:"mini_limit"` // 下限
RewardAmount int64 `gorm:"column:reward_amount;type:bigint(20);default:0;comment:第二到第6天奖励金额" web:"reward_amount"` // 第二到第6天奖励金额 RewardAmount int64 `gorm:"column:reward_amount;type:bigint(20);default:0;comment:第二到第6天奖励金额" web:"reward_amount"` // 第二到第6天奖励金额
Discount int64 `gorm:"column:discount;type:bigint(20);default:0;comment:第二到第6天奖励金额" web:"discount"` // 满减券折扣 Discount int64 `gorm:"column:discount;type:bigint(20);default:0;comment:第二到第6天奖励金额" web:"discount"` // 满减券折扣
} }
@ -551,11 +551,11 @@ func (m *ConfigActivityPopup) TableName() string {
} }
type ConfigDiscountTicket struct { type ConfigDiscountTicket struct {
Id int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key" json:"id"` ID int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key" json:"id"`
RechargeAmount int64 `gorm:"column:recharge_amount;type:bigint(20)" json:"recharge_amount"` RechargeAmount int64 `gorm:"column:recharge_amount;type:bigint(20)" web:"recharge_amount"`
DiscountAmount int64 `gorm:"column:discount_amount;type:bigint(20)" json:"discount_amount"` DiscountAmount int64 `gorm:"column:discount_amount;type:bigint(20)" web:"discount_amount"`
CurProb int `gorm:"column:cur_prob;type:int(11)" json:"cur_prob"` CurProb int `gorm:"column:cur_prob;type:int(11)" web:"cur_prob"`
NextProb int `gorm:"column:next_prob;type:int(11)" json:"next_prob"` NextProb int `gorm:"column:next_prob;type:int(11)" web:"next_prob"`
} }
func (m *ConfigDiscountTicket) TableName() string { func (m *ConfigDiscountTicket) TableName() string {
@ -563,12 +563,12 @@ func (m *ConfigDiscountTicket) TableName() string {
} }
type ConfigRtp struct { type ConfigRtp struct {
Id int `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"` ID int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key"`
MinRecharge int64 `gorm:"column:min_recharge;type:bigint(20);comment:最小充值" json:"min_recharge"` MinRecharge int64 `gorm:"column:min_recharge;type:bigint(20);comment:最小充值" web:"min_recharge"`
MaxRecharge int64 `gorm:"column:max_recharge;type:bigint(20);comment:最小充值" json:"max_recharge"` MaxRecharge int64 `gorm:"column:max_recharge;type:bigint(20);comment:最小充值" web:"max_recharge"`
Rtp int `gorm:"column:rtp;type:int(11);comment:rtp" json:"rtp"` Rtp int `gorm:"column:rtp;type:int(11);comment:rtp" json:"rtp" web:"rtp"`
EnterPer int `gorm:"column:enter_per;type:int(11);comment:进入提存比" json:"enter_per"` EnterPer int `gorm:"column:enter_per;type:int(11);comment:进入提存比" web:"enter_per"`
ExitPer int `gorm:"column:exit_per;type:int(11);comment:退出提存比" json:"exit_per"` ExitPer int `gorm:"column:exit_per;type:int(11);comment:退出提存比" web:"exit_per"`
} }
func (m *ConfigRtp) TableName() string { func (m *ConfigRtp) TableName() string {

@ -180,6 +180,7 @@ type ConfigPlatform struct {
BlackList int `gorm:"column:black_list;type:int(11);default:0;comment:是否开启黑名单 0不开 1开启" json:"BlackList" web:"black_list"` BlackList int `gorm:"column:black_list;type:int(11);default:0;comment:是否开启黑名单 0不开 1开启" json:"BlackList" web:"black_list"`
Rtp int `gorm:"column:rtp;type:int(11);default:0;comment:平台RTP" json:"Rtp" web:"rtp"` Rtp int `gorm:"column:rtp;type:int(11);default:0;comment:平台RTP" json:"Rtp" web:"rtp"`
ShareBindReward int64 `gorm:"column:share_bind_reward;type:bigint(20);default:0;comment:分享奖励" json:"ShareBindReward" web:"share_bind_reward"` ShareBindReward int64 `gorm:"column:share_bind_reward;type:bigint(20);default:0;comment:分享奖励" json:"ShareBindReward" web:"share_bind_reward"`
MiniAmount int64 `gorm:"column:mini_amount;type:bigint(20);default:0;comment:小于这个金额就充值" json:"MiniAmount" web:"mini_amount"`
} }
func (c *ConfigPlatform) TableName() string { func (c *ConfigPlatform) TableName() string {
@ -242,6 +243,7 @@ type ConfigPayChannels struct {
PayUp int64 `gorm:"column:pay_up;type:bigint(20);default:1;comment:代收上限" json:"PayUp" web:"pay_up"` PayUp int64 `gorm:"column:pay_up;type:bigint(20);default:1;comment:代收上限" json:"PayUp" web:"pay_up"`
CurrencyType CurrencyType `gorm:"column:currency_type;type:bigint(20);default:1;uniqueIndex:channel_id;comment:货币类型" json:"CurrencyType" web:"currency_type"` CurrencyType CurrencyType `gorm:"column:currency_type;type:bigint(20);default:1;uniqueIndex:channel_id;comment:货币类型" json:"CurrencyType" web:"currency_type"`
Kind int64 `gorm:"column:kind;type:bigint(20);default:1;comment:协议类型" json:"Kind" web:"kind"` Kind int64 `gorm:"column:kind;type:bigint(20);default:1;comment:协议类型" json:"Kind" web:"kind"`
PayStatus int `gorm:"-"` // 渠道状态 1 好 2 中等 3 差
} }
func (c *ConfigPayChannels) TableName() string { func (c *ConfigPayChannels) TableName() string {
@ -462,6 +464,10 @@ type ConfigBroadcast struct {
ConditionUp int `gorm:"column:condition_up;type:int(11);comment:触发条件上限" web:"condition_up"` ConditionUp int `gorm:"column:condition_up;type:int(11);comment:触发条件上限" web:"condition_up"`
} }
func (c *ConfigBroadcast) TableName() string {
return "config_broadcast"
}
type ConfigNotice struct { type ConfigNotice struct {
ID int `gorm:"primarykey"` ID int `gorm:"primarykey"`
Title1 string `gorm:"column:title1;type:varchar(255);comment:标题1" web:"title1"` // 公告标题_1(英语) Title1 string `gorm:"column:title1;type:varchar(255);comment:标题1" web:"title1"` // 公告标题_1(英语)
@ -476,6 +482,10 @@ type ConfigNotice struct {
PushTimes int `gorm:"column:push_times;type:int(11);comment:推送次数" web:"push_times"` // 推送次数 PushTimes int `gorm:"column:push_times;type:int(11);comment:推送次数" web:"push_times"` // 推送次数
} }
func (c *ConfigNotice) TableName() string {
return "config_notice"
}
// 货币汇率(各种货币转换成美元的汇率) // 货币汇率(各种货币转换成美元的汇率)
type ConfigCurrencyRateUSD struct { type ConfigCurrencyRateUSD struct {
ID int `gorm:"primary_key;AUTO_INCREMENT;column:id"` ID int `gorm:"primary_key;AUTO_INCREMENT;column:id"`

@ -100,6 +100,7 @@ const (
CurrencyEventActivitySlots // slots奖池 CurrencyEventActivitySlots // slots奖池
CurrencyEventActivitySuper // 超级1+2 CurrencyEventActivitySuper // 超级1+2
CurrencyEventActivityBetDraw // 下注抽奖 CurrencyEventActivityBetDraw // 下注抽奖
CurrencyEventActivityShareBind // 分享绑定
CurrencyEventAll CurrencyEventAll
CurrencyEventGM = 1000 // 后台修改货币 CurrencyEventGM = 1000 // 后台修改货币

@ -150,13 +150,6 @@ const (
WithdrawOrderTypeAll WithdrawOrderTypeAll
) )
// 支付类型
const (
WithdrawTypeWallet = 3
WithdrawTypeUPI = 4
WithdrawTypeBank = 7
)
type WithdrawOrder struct { type WithdrawOrder struct {
ID uint `gorm:"primarykey"` ID uint `gorm:"primarykey"`
UID int `gorm:"column:uid;not null;type:int(11)"` UID int `gorm:"column:uid;not null;type:int(11)"`

@ -44,7 +44,10 @@ const (
RedisKeyRealMail = "realMail" // 给玩家发真实邮件控制 RedisKeyRealMail = "realMail" // 给玩家发真实邮件控制
// RedisKeyPlayerPay = "playerPay" // 玩家10分钟内付费拉起的渠道记录 // RedisKeyPlayerPay = "playerPay" // 玩家10分钟内付费拉起的渠道记录
RedisKeyPlayerPayInterval = "playerPayInterval" // 玩家拉单间隔限制 RedisKeyPlayerPayInterval = "playerPayInterval" // 玩家拉单间隔限制
RedisKeyGameCurrency = "gameCurrency" // 玩家进入游戏时选择的币种 RedisKeyPlayerPayCount = "playerPayIntervalCount"
RedisKeyGameCurrency = "gameCurrency" // 玩家进入游戏时选择的币种
RedisKeyPlayerRTP = "playerRtp" // 玩家RTP
RedisKeyChannelOrder = "channelOrder" //
) )
const ( const (
@ -57,8 +60,11 @@ func GetRedisKeyGameCurrency(uid int) string {
return fmt.Sprintf("%v:%v", RedisKeyGameCurrency, uid) return fmt.Sprintf("%v:%v", RedisKeyGameCurrency, uid)
} }
func GetRedisKeyPlayerPayInterval(uid int) string { func GetRedisKeyPlayerPayCount(uid int) string {
return fmt.Sprintf("%v:%v", RedisKeyPlayerPayInterval, uid) return fmt.Sprintf("%v:%v:%v", RedisKeyPlayerPayCount, uid)
}
func GetRedisKeyPlayerChannelPayInterval(channel, uid int) string {
return fmt.Sprintf("%v:%v:%v", RedisKeyPlayerPayInterval, uid, channel)
} }
// func GetRedisKeyPlayerPay(uid int) string { // func GetRedisKeyPlayerPay(uid int) string {
@ -189,3 +195,7 @@ func GetBackendReviewKey(date string, channel *int) string {
} }
return ret return ret
} }
func GetRedisKeyPlayerRtp(uid int) string {
return fmt.Sprintf("%v:%v", RedisKeyPlayerRTP, uid)
}

@ -43,6 +43,25 @@ type ShareInfo struct {
AvailableReward int64 `gorm:"column:available_reward;type:bigint(20);default:0;comment:可支配佣金"` AvailableReward int64 `gorm:"column:available_reward;type:bigint(20);default:0;comment:可支配佣金"`
Time int64 `gorm:"column:time;type:bigint(20);default:0;comment:加入的时间"` Time int64 `gorm:"column:time;type:bigint(20);default:0;comment:加入的时间"`
ActivityId int `gorm:"column:activity_id;type:int(11);default:0;comment:来自于哪个分享活动"` ActivityId int `gorm:"column:activity_id;type:int(11);default:0;comment:来自于哪个分享活动"`
RechargeAmount int64 `gorm:"column:recharge_amount;type:bigint(20);default:0;comment:充值金额"`
BetAmount int64 `gorm:"column:bet_amount;type:bigint(20);default:0;comment:下注金额"`
}
func (a *ShareInfo) TableName() string {
return "share_info"
}
type ShareDetail struct {
ID int `gorm:"primarykey"`
UID int `gorm:"column:uid;not null;type:int(11);"`
Up int `gorm:"column:up;type:int(11);default:0;comment:上级"`
Reward int64 `gorm:"column:reward;type:bigint(20);default:0;comment:获取奖励"`
RechargeAmount int64 `gorm:"column:recharge_amount;type:bigint(20);default:0;comment:充值金额"`
Time int64 `gorm:"column:time;type:bigint(20);default:0;comment:时间"`
}
func (m *ShareDetail) TableName() string {
return "share_detail"
} }
// 绑定关系 // 绑定关系
@ -75,10 +94,6 @@ type ShareInfo struct {
// Time int64 `gorm:"column:time;type:bigint(20);default:0;comment:加入的时间"` // Time int64 `gorm:"column:time;type:bigint(20);default:0;comment:加入的时间"`
// } // }
func (a *ShareInfo) TableName() string {
return "share_info"
}
type ShareActivityCode struct { type ShareActivityCode struct {
Id int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key;" json:"id"` Id int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key;" json:"id"`
UID int `gorm:"column:uid;type:int(11);index:idx_share;comment:玩家ID" json:"uid"` UID int `gorm:"column:uid;type:int(11);index:idx_share;comment:玩家ID" json:"uid"`

@ -114,6 +114,7 @@ func WithdrawList(c *gin.Context) {
43: "PayPlus", 43: "PayPlus",
44: "LuckinPay", 44: "LuckinPay",
45: "EaniPay", 45: "EaniPay",
46: "AgroPay",
} }
a.Data = values.WithdrawListResp{List: WithdrawOrderArr, Count: count, PayList: payList} a.Data = values.WithdrawListResp{List: WithdrawOrderArr, Count: count, PayList: payList}
} }

@ -96,8 +96,10 @@ func GetGameUserInfo(c *gin.Context) {
rtp := call.GetUserRtp(uid) rtp := call.GetUserRtp(uid)
if rtp.Id == 0 { if rtp.Id == 0 {
db.Mysql().Create(rtp) db.Mysql().Create(rtp)
rtp.Rtp, _ = db.Redis().GetInt(common.GetRedisKeyPlayerRtp(uid))
} else {
resp.Rtp = rtp.Rtp
} }
resp.Rtp = rtp.Rtp
// resp.RechargeUsdt = usdtInfo.TotalRecharge // resp.RechargeUsdt = usdtInfo.TotalRecharge
// resp.WithdrawUsdt = usdtInfo.TotoalWithdraw // resp.WithdrawUsdt = usdtInfo.TotoalWithdraw

@ -119,6 +119,7 @@ func MigrateDB() {
new(common.ConfigDiscountTicket), new(common.ConfigDiscountTicket),
new(common.ConfigRtp), new(common.ConfigRtp),
new(common.PlayerRtpData), new(common.PlayerRtpData),
new(common.ShareDetail),
) )
if err != nil { if err != nil {
panic("Migrate db fail") panic("Migrate db fail")

@ -33,7 +33,7 @@ type Player struct {
func afterSettle(d *pb.InnerAfterSettle) { func afterSettle(d *pb.InnerAfterSettle) {
log.Debug("afterSettle:%+v", *d) log.Debug("afterSettle:%+v", *d)
UpdateGameData(d) UpdateGameData(d)
call.ShareSettle(d) // call.ShareSettle(d)
// p := &Player{uid: int(d.UID), gid: int(d.GameID), settleData: d} // p := &Player{uid: int(d.UID), gid: int(d.GameID), settleData: d}
// p.ActivityFirstRechargeBack() // p.ActivityFirstRechargeBack()
} }

@ -0,0 +1,178 @@
package agropay
import (
"errors"
"fmt"
"net/http"
"server/common"
"server/modules/pay/base"
"server/modules/pay/values"
"server/pb"
"server/util"
"github.com/gogo/protobuf/proto"
"github.com/liangdas/mqant/log"
)
func NewSub(b *base.Base) {
sub := &Sub{
Base: b,
}
b.SignKey = key
b.HttpType = base.HttpTypeJson
b.ShouldSignUpper = true
if b.Opt == base.OPTPay {
b.Resp = new(PayResp)
b.ReqURL = baseURL + payURL
} else if b.Opt == base.OPTWithdraw {
b.Resp = new(WithdrawResp)
b.ReqURL = baseURL + withdrawURL
} else if b.Opt == base.OPTPayCB {
b.SignPassStr = []string{"sign"}
b.CallbackResp.Msg = "SUCCESS"
b.CallbackReq = new(PayCallbackReq)
} else if b.Opt == base.OPTWithdrawCB {
b.SignPassStr = []string{"sign", "msg"}
b.CallbackResp.Msg = "SUCCESS"
b.CallbackReq = new(WithdrawCallbackReq)
} else if b.Opt == base.OPTQueryWithdraw {
b.Resp = new(QueryWithdrawResp)
b.ReqURL = baseURL + queryWithdrawURL
} else if b.Opt == base.OPTQueryPay {
b.Resp = new(QueryPayResp)
b.ReqURL = baseURL + queryPayURL
}
b.Sub = sub
}
type Sub struct {
Base *base.Base
}
func (s *Sub) PackHeader(header http.Header) {
}
func (s *Sub) PackReq() interface{} {
if s.Base.Opt == base.OPTPay {
return s.PackPayReq()
} else if s.Base.Opt == base.OPTWithdraw {
return s.PackWithdrawReq()
}
return nil
}
func (s *Sub) GetResp() (proto.Message, error) {
if s.Base.Opt == 1 {
resp := s.Base.Resp.(*PayResp)
if resp.Code != 2000 || resp.Data.PayData == "" {
return nil, errors.New("pay fail")
}
return &pb.InnerRechargeResp{APIOrderID: resp.Data.PayOrderId, URL: resp.Data.PayData, Channel: uint32(values.AgroPay)}, nil
} else if s.Base.Opt == base.OPTWithdraw {
resp := s.Base.Resp.(*WithdrawResp)
if s.Base.Status == 0 && resp.Code != 2000 {
return nil, errors.New("withdraw fail")
}
return &pb.InnerWithdrawResp{APIOrderID: fmt.Sprintf("%v", resp.Data.TransferId), Channel: uint32(values.AgroPay)}, nil
}
return nil, fmt.Errorf("unknow opt")
}
func (s *Sub) PackPayReq() interface{} {
r := s.Base.PayReq
r.Amount /= 100
if len(r.Phone) == 12 {
r.Phone = r.Phone[2:]
}
send := &PayReq{
MchNo: mid,
AppId: appID,
MchOrderNo: r.OrderID,
// Amount: fmt.Sprintf("%d", r.Amount),
Amount: float64(r.Amount),
Currency: "INR",
UserName: r.Name,
Phone: r.Phone,
Email: r.Email,
Subject: "shop",
Body: "shop buy",
NotifyUrl: values.GetPayCallback(values.AgroPay),
ReturnUrl: values.GetFrontCallback(),
RiskControlExtParam: fmt.Sprintf(`{"userId":%d}`, r.UID),
EncryptPhone: util.CalculateMD5(r.Phone),
EncryptEmail: util.CalculateMD5(r.Email),
}
send.Sign = s.Base.SignMD5(send)
return send
}
func (s *Sub) PackWithdrawReq() interface{} {
r := s.Base.WithdrawReq
r.Amount /= 100
if len(r.Phone) == 12 {
r.Phone = r.Phone[2:]
}
send := &WithdrawReq{
MchNo: mid,
AppId: appID,
MchOrderNo: r.OrderID,
Amount: fmt.Sprintf("%d", r.Amount),
Currency: "INR",
// EntryType: ,
// AccountNo: ,
// IfscCode: ,
AccountName: r.Name,
Phone: r.Phone,
Email: r.Email,
Address: r.Address,
// BankName: ,
ClientIp: r.IP,
TransferDesc: "shop withdraw",
NotifyUrl: values.GetWithdrawCallback(values.AgroPay),
// ChannelExtra
// ExtParam: ,
EncryptPhone: util.CalculateMD5(r.Phone),
EncryptEmail: util.CalculateMD5(r.Email),
DeviceId: r.DeviceID,
}
if r.PayType == int64(common.PayTypeBank) {
send.EntryType = "banks"
send.AccountNo = r.CardNo
send.IfscCode = r.PayCode
send.BankName = r.BankName
} else if r.PayType == int64(common.PayTypeUPI) {
send.EntryType = "upi"
send.AccountNo = r.PayCode
} else {
return nil
}
send.Sign = s.Base.SignMD5(send)
return send
}
func (s *Sub) CheckSign(str string) bool {
// str += "&key=" + key
checkSign := ""
s.Base.CallbackResp.Msg = "success"
mySign := ""
if s.Base.Opt == base.OPTPayCB {
req := s.Base.CallbackReq.(*PayCallbackReq)
log.Debug("checkSign pay:%+v", *req)
checkSign = req.Sign
s.Base.CallbackResp.OrderID = req.MchOrderNo
s.Base.CallbackResp.Success = req.State == 2
mySign = s.Base.SignMD5(req)
} else if s.Base.Opt == base.OPTWithdrawCB {
req := s.Base.CallbackReq.(*WithdrawCallbackReq)
log.Debug("checkSign withdraw:%+v", *req)
checkSign = req.Sign
s.Base.CallbackResp.OrderID = req.MchOrderNo
s.Base.CallbackResp.Success = req.State == 2
s.Base.CallbackResp.APIOrderID = req.TransferId
s.Base.CallbackResp.FailMessage = req.ErrMsg
mySign = s.Base.SignMD5(req)
}
return mySign == checkSign
}

@ -0,0 +1,176 @@
package agropay
const (
baseURL = "https://api.agropay.in"
payURL = "/api/pay/unifiedOrder"
queryPayURL = "/api/pay/query"
withdrawURL = "/api/transferOrder"
queryWithdrawURL = "/api/transfer/query"
mid = "M1724385307"
appID = "66c8081ce4b08979898ba25d"
key = "W6zCKP5RcJ6fAimnYgPxE4I8cd0yxzLJ5Vb3N6OLfMNstea7WzxVtgYo1wOJq45nD8xa1dAoNm23PSqfiaIaxkWxjy4XaXSGC3jv49mRCIkqnLOh2uaQRu9zysbon1DO"
)
type PayReq struct {
MchNo string `json:"mchNo"`
AppId string `json:"appId"`
MchOrderNo string `json:"mchOrderNo"`
Amount float64 `json:"amount"`
Currency string `json:"currency"`
UserName string `json:"userName"`
Phone string `json:"phone"`
Email string `json:"email"`
Subject string `json:"subject"`
Body string `json:"body"`
NotifyUrl string `json:"notifyUrl"`
ReturnUrl string `json:"returnUrl"`
ExtParam string `json:"extParam"`
RiskControlExtParam string `json:"riskControlExtParam"`
EncryptPhone string `json:"encryptPhone"`
EncryptEmail string `json:"encryptEmail"`
DeviceId string `json:"deviceId"`
Sign string `json:"sign"`
}
type PayResp struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
PayOrderId string `json:"payOrderId"`
MchOrderNo string `json:"mchOrderNo"`
State int `json:"state"`
PayDataType string `json:"payDataType"`
PayData string `json:"payData"`
ErrCode string `json:"errCode"`
ErrMsg string `json:"errMsg"`
} `json:"data"`
Sign string `json:"sign"`
}
type PayCallbackReq struct {
PayOrderId string `json:"payOrderId"` // 支付平台订单号
MchOrderNo string `json:"mchOrderNo"` // 商户订单号
MchNo string `json:"mchNo"` // 商户号
AppId string `json:"appId"` // 商户应用ID
Amount string `json:"amount"` // 订单金额 保留两位小数
RealAmount string `json:"realAmount"` // 实际支付金额 state=2 时,必须以这个金额为准,其它状态时,值为 0
State int `json:"state"` // 订单状态 1 - 支付中 2 - 支付成功 3 - 支付失败 5 - 已退款
ErrCode string `json:"errCode"` // 错误码
ErrMsg string `json:"errMsg"` // 错误描述
ExtParam string `json:"extParam"` // 商户扩展参数
SuccessTime int64 `json:"successTime"` // 订单支付成功时间
CreatedAt int64 `json:"createdAt"` // 订单创建时间
Sign string `json:"sign"` // 参数签名
}
type WithdrawReq struct {
MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号
AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID
MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 是 商户保证唯一性
Amount string `json:"amount"` // 代付订单金额 BigDecimal 是 单位:卢比,最多保留两位小数
Currency string `json:"currency"` // 货币代码 String 是 货币代码:INR
EntryType string `json:"entryType"` // 入账方式 String 否 banks,upi,paytm,不传默认 banks(paytm 暂不支持)
AccountNo string `json:"accountNo"` // 收款账号 String 是 收款账号, banks: 银行卡号,upi: UPI 账号,paytm:paytm 账号
IfscCode string `json:"ifscCode"` // ifscCode String 否 如果入账方式为 banks,这个参数必传
AccountName string `json:"accountName"` // 收款人姓名 String 是 收款人姓名,5 - 255 个字符,前后不允许有空格,不支持空格以外的其它特殊字符
Phone string `json:"phone"` // 收款人电话 String 是 收款人电话。十位数字,不用加印度的国际电话区号 91。
Email string `json:"email"` // 邮箱 String 是 收款人邮箱
Address string `json:"address"` // 收款人地址 String 是 收款人地址
BankName string `json:"bankName"` // 开户行名称 String 否 开户行名称
ClientIp string `json:"clientIp"` // 客户端 IP String 否 客户端 IP
TransferDesc string `json:"transferDesc"` // 转账备注 String 是 转账备注
NotifyUrl string `json:"notifyUrl"` // 异步通知地址 String 是 异步通知地址,只支持 https
ChannelExtra string `json:"channelExtra"` // 特定渠道发起额外参数 String 否
ExtParam string `json:"extParam"` // 商户扩展参数 String 否
EncryptPhone string `json:"encryptPhone"` // MD5 加密后的真实手机号 String 是 加密方法请参考签名文档中的 MD5 加密方法,用于黑名单校验
EncryptEmail string `json:"encryptEmail"` // MD5 加密后的真实邮件地址 String 是 加密方法请参考签名文档中的 MD5 加密方法,用于黑名单校验
DeviceId string `json:"deviceId"` // 用户设备 ID String 是 设备 ID:用来标识用户当前使用的设备,要求最好是唯一、并且与用户账号无关的。
Sign string `json:"sign"` // 签名 String 是 详见签名算法
}
type WithdrawResp struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
TransferId string `json:"transferId"`
MchOrderNo string `json:"mchOrderNo"`
State int `json:"state"`
ErrCode string `json:"errCode"`
ErrMsg string `json:"errMsg"`
} `json:"data"`
Sign string `json:"sign"`
}
type WithdrawCallbackReq struct {
TransferId string `json:"transferId"`
MchOrderNo string `json:"mchOrderNo"`
MchNo string `json:"mchNo"`
AppId string `json:"appId"`
Amount string `json:"amount"`
Utr string `json:"utr"`
State byte `json:"state"`
ErrCode string `json:"errCode"`
ErrMsg string `json:"errMsg"`
ExtParam string `json:"extParam"`
SuccessTime int64 `json:"successTime"`
CreatedAt int64 `json:"createdAt"`
Sign string `json:"sign"`
}
type QueryWithdrawReq struct {
MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号
AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID
MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 否 商户订单号与平台代付订单号必须传一个
TransferId string `json:"transferId"` // 平台代付订单号 String 否 商户订单号与平台代付订单号必须传一个
Sign string `json:"sign"` // 签名 String 是 详见签名算法
}
type QueryWithdrawResp struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
TransferId string `json:"transferId"`
MchOrderNo string `json:"mchOrderNo"`
MchNo string `json:"mchNo"`
AppId string `json:"appId"`
Amount string `json:"amount"`
Utr string `json:"utr"`
State int `json:"state"`
ErrCode string `json:"errCode"`
ErrMsg string `json:"errMsg"`
ExtParam string `json:"extParam"`
SuccessTime int64 `json:"successTime"`
CreatedAt int64 `json:"createdAt"`
Sign string `json:"sign"`
} `json:"data"`
Sign string `json:"sign"`
}
type QueryPayReq struct {
MchNo string `json:"mchNo"` // 商户号 String 是 平台分配的商户号
AppId string `json:"appId"` // 商户应用ID String 是 商户应用ID
MchOrderNo string `json:"mchOrderNo"` // 商户生成的唯一订单号 String 否 商户订单号与平台订单号必须传一个
PayOrderId string `json:"payOrderId"` // 平台订单号 String 否 商户订单号与平台订单号必须传一个
Sign string `json:"sign"` // 签名 String 是 详见签名算法
}
type QueryPayResp struct {
Code int // 返回码 2000:成功(仅代表请求成功,不代表业务成功);2010:系统异常;2011:参数有误;2012:数据库服务异常;9999:自定义业务异常
Msg string // 业务响应信息 成功:success
Data struct {
PayOrderId string // 支付平台订单号
MchOrderNo string // 商户订单号
MchNo string // 商户号
AppId string // 商户应用ID
Amount string // 支付金额 保留两位小数
RealAmount string // 实际支付金额 state=2 时,必须以这个金额为准,其它状态时,值为 0
State int // 订单状态 1 - 支付中 2 - 支付成功 3 - 支付失败 5 - 已退款
ErrCode string // 错误码
ErrMsg string // 错误描述
ExtParam string // 商户扩展参数
SuccessTime int64 // 订单支付成功时间
CreatedAt int64 // 订单创建时间
Sign string // 参数签名
} // 数据对象 成功时返回
Sign string // 签名 详见签名算法(data 中的数据参与签名)
}

@ -2,6 +2,7 @@ package allpay
import ( import (
"reflect" "reflect"
"server/modules/pay/agropay"
"server/modules/pay/base" "server/modules/pay/base"
"server/modules/pay/eanipay" "server/modules/pay/eanipay"
"server/modules/pay/gopay" "server/modules/pay/gopay"
@ -61,6 +62,7 @@ type AllPay struct {
PayPlus func(b *base.Base) PayPlus func(b *base.Base)
LuckyinPay func(b *base.Base) LuckyinPay func(b *base.Base)
Eanipay func(b *base.Base) Eanipay func(b *base.Base)
AgroPay func(b *base.Base)
} }
var All = &AllPay{} var All = &AllPay{}
@ -73,6 +75,7 @@ func init() {
All.PayPlus = payplus.NewSub All.PayPlus = payplus.NewSub
All.LuckyinPay = luckyinpay.NewSub All.LuckyinPay = luckyinpay.NewSub
All.Eanipay = eanipay.NewSub All.Eanipay = eanipay.NewSub
All.AgroPay = agropay.NewSub
} }
func NewSub(b *base.Base, index int) { func NewSub(b *base.Base, index int) {

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

@ -1,8 +1,8 @@
package gopay package gopay
const ( const (
payURL = "https://gooopay.online/api/recharge/create" payURL = "https://rummylotus.online/api/recharge/create"
withdrawURL = "https://gooopay.online/api/deposit/create" withdrawURL = "https://rummylotus.online/api/deposit/create"
mid = "2024100038" mid = "2024100038"
key = "326eb5a2f78a4dacb4780104ba16030c" key = "326eb5a2f78a4dacb4780104ba16030c"
) )

@ -14,8 +14,8 @@ const (
payCallbackURL = "/grepay/pay/callback" payCallbackURL = "/grepay/pay/callback"
withdrawURL = "https://payout.metagopayments.com/cashier/TX0001.ac" withdrawURL = "https://payout.metagopayments.com/cashier/TX0001.ac"
withdrawCallbackURL = "/grepay/withdraw/callback" withdrawCallbackURL = "/grepay/withdraw/callback"
orgNo = "8220800959" orgNo = "8240800022"
mid = "22081000002504" mid = "24082600000022"
// key = "FF5D557F6AC9EF26212B482B23AD7F07" // key = "FF5D557F6AC9EF26212B482B23AD7F07"
) )

@ -147,26 +147,31 @@ func (s *Sub) PackWithdrawReq() interface{} {
func (s *Sub) CheckSign(str string) bool { func (s *Sub) CheckSign(str string) bool {
log.Debug("callback:%v", s.Base.CallbackReq) log.Debug("callback:%v", s.Base.CallbackReq)
checkSign := ""
sign := str
if s.Base.Opt == base.OPTPayCB { if s.Base.Opt == base.OPTPayCB {
req := s.Base.CallbackReq.(*PayCallbackReq) req := s.Base.CallbackReq.(*PayCallbackReq)
s.Base.CallbackResp.OrderID = req.PartnerOrderNo s.Base.CallbackResp.OrderID = req.PartnerOrderNo
s.Base.CallbackResp.APIOrderID = req.OrderNo s.Base.CallbackResp.APIOrderID = req.OrderNo
s.Base.CallbackResp.Success = req.Status == 1 s.Base.CallbackResp.Success = req.Status == 1
checkSign = req.Sign signStr := values.GetSignStrFormURLEncode(s.Base.C, req, "sign")
log.Debug("req:%v,pay signStr:%v", *req, signStr)
return checkSign(signStr, req.Sign, 0)
} else if s.Base.Opt == base.OPTWithdrawCB { } else if s.Base.Opt == base.OPTWithdrawCB {
req := s.Base.CallbackReq.(*WithdrawCallbackReq) req := s.Base.CallbackReq.(*WithdrawCallbackReq)
signStr := values.GetSignStrFormURLEncode(s.Base.C, req, "sign")
log.Debug("req:%v,withdraw signStr:%v", *req, signStr)
s.Base.CallbackResp.OrderID = req.PartnerWithdrawNo s.Base.CallbackResp.OrderID = req.PartnerWithdrawNo
s.Base.CallbackResp.Success = req.Status == 1 s.Base.CallbackResp.Success = req.Status == 1
return checkSign(signStr, req.Sign, 1)
} }
if s.Base.KeyName == "" { return false
sign += "&key=" + s.Base.SignKey }
func checkSign(str, sign string, t int) (pass bool) {
str = values.GetSignStrURLEncode(str, "sign")
if t == 0 {
str += "&key=" + key
} else { } else {
sign += "&" + s.Base.KeyName + "=" + s.Base.SignKey str += "&key=" + withdrawKey
} }
ret := util.CalculateMD5(sign) return strings.ToUpper(util.CalculateMD5(str)) == sign
ret = strings.ToUpper(ret)
log.Info("SignStr:%v,SignMD5:%v", sign, ret)
return checkSign == ret
} }

@ -6,6 +6,8 @@ import (
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"net/http" "net/http"
"net/url"
"reflect"
"server/call" "server/call"
"server/common" "server/common"
"server/config" "server/config"
@ -70,6 +72,7 @@ const (
PayPlus PayPlus
LuckyinPay LuckyinPay
EaniPay EaniPay
AgroPay
PayAll PayAll
) )
@ -199,41 +202,43 @@ func WithdrawSuccess(w PayWay) {
} }
func PayFail(w PayWay) { func PayFail(w PayWay) {
failWeight := config.GetConfig().Pay.PayFailWeight // failWeight := config.GetConfig().Pay.PayFailWeight
if failWeight <= 0 { // if failWeight <= 0 {
return // return
} // }
PayWeightLock.Lock() // PayWeightLock.Lock()
for _, v := range call.ConfigPayChannels { // for _, v := range call.ConfigPayChannels {
if v.ChannelID == int(w) { // if v.ChannelID == int(w) {
v.PayPer -= failWeight // v.PayPer -= failWeight
break // break
} // }
} // }
sort.Slice(call.ConfigPayChannels, func(i, j int) bool { // sort.Slice(call.ConfigPayChannels, func(i, j int) bool {
return call.ConfigPayChannels[i].PayPer > call.ConfigPayChannels[j].PayPer // return call.ConfigPayChannels[i].PayPer > call.ConfigPayChannels[j].PayPer
}) // })
PayWeightLock.Unlock() // PayWeightLock.Unlock()
AddPayChannel(int(w), -failWeight) // AddPayChannel(int(w), -failWeight)
// call.AddChannel(int(w), false)
} }
func PayCallback(w PayWay) { func PaySuccess(w PayWay) {
successWeight := config.GetConfig().Pay.PaySuccessWeight // successWeight := config.GetConfig().Pay.PaySuccessWeight
if successWeight <= 0 { // if successWeight <= 0 {
return // return
} // }
PayWeightLock.Lock() // PayWeightLock.Lock()
for _, v := range call.ConfigPayChannels { // for _, v := range call.ConfigPayChannels {
if v.ChannelID == int(w) { // if v.ChannelID == int(w) {
v.PayPer += successWeight // v.PayPer += successWeight
break // break
} // }
} // }
sort.Slice(call.ConfigPayChannels, func(i, j int) bool { // sort.Slice(call.ConfigPayChannels, func(i, j int) bool {
return call.ConfigPayChannels[i].PayPer > call.ConfigPayChannels[j].PayPer // return call.ConfigPayChannels[i].PayPer > call.ConfigPayChannels[j].PayPer
}) // })
PayWeightLock.Unlock() // PayWeightLock.Unlock()
AddPayChannel(int(w), successWeight) // AddPayChannel(int(w), successWeight)
call.AddChannel(int(w), true)
} }
// 获取支付回调路径 // 获取支付回调路径
@ -545,3 +550,87 @@ func WithdrawAmount(w PayWay, success bool, amount int64) {
db.Mysql().UpdateW(&common.ConfigWithdrawChannels{}, map[string]interface{}{"amount": gorm.Expr("amount + ?", fee)}, fmt.Sprintf("channel_id = %d", int(w))) db.Mysql().UpdateW(&common.ConfigWithdrawChannels{}, map[string]interface{}{"amount": gorm.Expr("amount + ?", fee)}, fmt.Sprintf("channel_id = %d", int(w)))
}) })
} }
// 根据body里的字段直接拼接出签名字符串
func GetSignStrURLEncode(str string, pass ...string) string {
sortStrs := []string{}
all, err := url.ParseQuery(str)
if err != nil {
log.Error("err:%e", err)
return ""
}
for k := range all {
sortStrs = append(sortStrs, k)
}
signStr := ""
sort.Strings(sortStrs)
for _, v := range sortStrs {
shouldPass := false
for _, s := range pass {
if v == s {
shouldPass = true
break
}
}
if shouldPass {
continue
}
tmp := all.Get(v)
if len(tmp) > 1 && tmp[0] == 34 {
tmp = tmp[1 : len(tmp)-1]
}
if len(tmp) == 0 {
continue
}
signStr += fmt.Sprintf("%v=%v", v, string(tmp))
signStr += "&"
}
signStr = signStr[:len(signStr)-1]
log.Debug("signStr:%v", signStr)
return signStr
}
func GetSignStrFormURLEncode(c *gin.Context, model interface{}, pass ...string) string {
sortStrs := []string{}
for k := range c.Request.URL.Query() {
sortStrs = append(sortStrs, k)
}
// ref := reflect.ValueOf(model)
reft := reflect.TypeOf(model)
if reft.Kind() == reflect.Ptr {
// ref = ref.Elem()
reft = reft.Elem()
}
signStr := ""
sort.Strings(sortStrs)
for _, v := range sortStrs {
shouldPass := false
for _, s := range pass {
if v == s {
shouldPass = true
break
}
}
if shouldPass {
continue
}
param := c.Query(v)
if len(param) == 0 {
continue
}
first := v[0]
tmpName := strings.ToUpper(string(first)) + v[1:]
field, ok := reft.FieldByName(tmpName)
if ok && field.Tag.Get("encode") == "1" { // 需要urlencode
param, _ = url.QueryUnescape(param)
}
signStr += fmt.Sprintf("%v=%v", v, param)
signStr += "&"
}
fmt.Println(signStr)
signStr = signStr[:len(signStr)-1]
log.Debug("signStr:%v", signStr)
return signStr
}

@ -776,7 +776,7 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
} }
resp := &values.ActivityLuckyCodeDrawResp{} resp := &values.ActivityLuckyCodeDrawResp{}
a.Data = resp a.Data = resp
code, _ := strconv.Atoi(req.LuckyCode)
var reward int64 var reward int64
// 判断是否为分享吗 // 判断是否为分享吗
@ -800,8 +800,7 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
UID: a.UID, UID: a.UID,
Type: common.CurrencyINR, Type: common.CurrencyINR,
Value: reward, Value: reward,
Event: common.CurrencyEventTask, Event: common.CurrencyEventActivityShareBind,
Exi1: code,
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward), NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward),
}, },
}) })
@ -813,13 +812,19 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
} }
} else { } else {
now := time.Now() now := time.Now()
code, err := strconv.Atoi(req.LuckyCode)
if err != nil {
a.Code = values.CodeParam
a.Msg = "The code you entered is incorrect"
return
}
luckyCode := &common.ActivityLuckyCode{Code: code, Date: now.Format("20060102")} luckyCode := &common.ActivityLuckyCode{Code: code, Date: now.Format("20060102")}
if !a.MGet(luckyCode) { err = db.Mysql().Get(&luckyCode)
if err != nil {
a.Code = values.CodeParam a.Code = values.CodeParam
a.Msg = "The code you entered is incorrect" a.Msg = "The code you entered is incorrect"
return return
} }
codeType := luckyCode.Type codeType := luckyCode.Type
data := &common.ActivityLuckyCodeData{UID: a.UID} data := &common.ActivityLuckyCodeData{UID: a.UID}
db.Mysql().Get(data) db.Mysql().Get(data)
@ -873,12 +878,12 @@ func ActivityLuckyCodeDraw(c *gin.Context) {
break break
} }
} }
_, err := call.UpdateCurrencyPro(&common.UpdateCurrency{ _, err = call.UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{ CurrencyBalance: &common.CurrencyBalance{
UID: a.UID, UID: a.UID,
Type: common.CurrencyINR, Type: common.CurrencyINR,
Value: reward, Value: reward,
Event: common.CurrencyEventTask, Event: common.CurrencyEventActivityLuckyCode,
Exs1: fmt.Sprintf("%d", codeType), Exs1: fmt.Sprintf("%d", codeType),
Exi1: code, Exi1: code,
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward), NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward),
@ -1465,7 +1470,7 @@ func ActivityWeekCardDraw(c *gin.Context) {
log.Info("maxAmount:%v", maxAmount) log.Info("maxAmount:%v", maxAmount)
ticket := call.GetConfigDiscountTicketByAmount(maxAmount) ticket := call.GetConfigDiscountTicketByAmount(maxAmount)
log.Info("ticket:%v", ticket) log.Info("ticket:%v", ticket)
if ticket.Id > 0 { if ticket.ID > 0 {
// 赠送优惠券 // 赠送优惠券
tickets := call.GetConfigDiscountTicket() tickets := call.GetConfigDiscountTicket()
sort.Slice(tickets, func(i, j int) bool { sort.Slice(tickets, func(i, j int) bool {
@ -1492,7 +1497,7 @@ func ActivityWeekCardDraw(c *gin.Context) {
call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits)) call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits))
resp.DiscountTicket = ticket.DiscountAmount resp.DiscountTicket = ticket.DiscountAmount
resp.Amount = ticket.RechargeAmount resp.Amount = ticket.RechargeAmount
} else if nextTicket.Id > 0 { } else if nextTicket.ID > 0 {
call.AddUserDiscountTicket(a.UID, nextTicket.DiscountAmount, nextTicket.RechargeAmount, -1, 1, false) call.AddUserDiscountTicket(a.UID, nextTicket.DiscountAmount, nextTicket.RechargeAmount, -1, 1, false)
call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits)) call.SendMailWithContent(a.UID, call.SystemTitle, fmt.Sprintf(call.EmailDiscount, ticket.DiscountAmount/common.DecimalDigits, ticket.RechargeAmount/common.DecimalDigits))
resp.DiscountTicket = nextTicket.DiscountAmount resp.DiscountTicket = nextTicket.DiscountAmount
@ -2193,3 +2198,15 @@ func DiscountTicketInfo(c *gin.Context) {
} }
resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR) resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR)
} }
func InviteRankInfo(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
if !a.CheckActivityExpire(common.ActivityIDBetDraw) {
return
}
resp := new(values.InviteInfoResp)
a.Data = resp
}

@ -4,6 +4,7 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"math/rand"
"server/call" "server/call"
"server/common" "server/common"
"server/db" "server/db"
@ -65,16 +66,20 @@ func FirstPage(c *gin.Context) {
gameNum := req.GameNum gameNum := req.GameNum
if strings.ToLower(v.Name) == "hot" { if strings.ToLower(v.Name) == "hot" {
gameNum = 100 gameNum = 100
} if v.JumpType == 1 {
if v.JumpType == 1 { one.List = call.GetConfigGameList(gameNum, v.JumpID)
one.List = call.GetConfigGameList(gameNum, v.JumpID) } else {
one.List = call.GetConfigGameList(gameNum, 0, v.JumpID)
}
} else { } else {
one.List = call.GetConfigGameList(gameNum, 0, v.JumpID) one.List = call.GetConfigGameList(0, 0)
rand.Shuffle(len(one.List), func(i, j int) {
one.List[i], one.List[j] = one.List[j], one.List[i]
})
} }
if gameNum != req.GameNum { if gameNum != req.GameNum {
// rand.Shuffle(len(one.List), func(i, j int) {
// one.List[i], one.List[j] = one.List[j], one.List[i]
// })
if len(one.List) > req.GameNum { if len(one.List) > req.GameNum {
one.List = one.List[:req.GameNum] one.List = one.List[:req.GameNum]
} }

@ -2,6 +2,7 @@ package handler
import ( import (
"fmt" "fmt"
"math/rand"
"server/call" "server/call"
"server/common" "server/common"
"server/db" "server/db"
@ -29,16 +30,31 @@ func GameList(c *gin.Context) {
resp := &values.GameListResp{Provider: req.Provider} resp := &values.GameListResp{Provider: req.Provider}
a.Data = resp a.Data = resp
var list, tmp []*common.ConfigGameList var list, tmp []*common.ConfigGameList
var randFlag bool
if req.Provider == -1 { if req.Provider == -1 {
req.Provider = 0 req.Provider = 0
} }
if req.Mark == -1 { if req.Mark == -1 {
req.Mark = 0 req.Mark = 0
} else {
req.Mark = 0
randFlag = true
} }
if req.Type == -1 || req.Type == 1 { if req.Type == -1 || req.Type == 1 {
req.Type = 0 req.Type = 0
} }
// if req.Provider == -1 {
// req.Provider = 0
// randFlag = true
// }
tmp = call.GetConfigGameList(0, req.Provider, req.Mark, req.Type) tmp = call.GetConfigGameList(0, req.Provider, req.Mark, req.Type)
if randFlag {
rand.Shuffle(len(tmp), func(i, j int) {
tmp[i], tmp[j] = tmp[j], tmp[i]
})
}
if len(req.Name) > 0 { if len(req.Name) > 0 {
reqName := strings.ToLower(req.Name) reqName := strings.ToLower(req.Name)
for _, v := range tmp { for _, v := range tmp {
@ -95,10 +111,6 @@ func EnterGame(c *gin.Context) {
if game != nil && game.Open == 1 { if game != nil && game.Open == 1 {
req.Provider = providerId req.Provider = providerId
resp.Method = provider.Method resp.Method = provider.Method
} else {
a.Code = values.CodeParam
a.Msg = "Under Maintenance,please try later."
return
} }
} }

@ -107,6 +107,9 @@ func RechargeInfo(c *gin.Context) {
}) })
} }
} }
for _, channel := range resp.Channels {
channel.PayStatus = call.GetChannelStatus(channel.ChannelID)
}
} }
func RechargeHistory(c *gin.Context) { func RechargeHistory(c *gin.Context) {
@ -148,7 +151,6 @@ func PlayerRecharge(c *gin.Context) {
return return
} }
log.Debug("player %v recharge:%+v", a.UID, *req) log.Debug("player %v recharge:%+v", a.UID, *req)
if req.CurrencyType == 0 { if req.CurrencyType == 0 {
req.CurrencyType = common.CurrencyINR req.CurrencyType = common.CurrencyINR
} }
@ -162,30 +164,15 @@ func PlayerRecharge(c *gin.Context) {
} else { } else {
req.Amount = common.RoundCurrency(req.CurrencyType, req.Amount) req.Amount = common.RoundCurrency(req.CurrencyType, req.Amount)
} }
payCount, _ := db.Redis().GetInt(common.GetRedisKeyPlayerPayCount(a.UID))
// product := call.GetConfigPayProductByID(req.ProductID) // 判断充值间隔 同渠道限制3秒拉一单 30秒限制4单
// if product == nil { if db.Redis().Exist(common.GetRedisKeyPlayerChannelPayInterval(req.PayChannel, a.UID)) && payCount >= 4 {
// log.Error("unknow product:%v", req.ProductID)
// a.Code = values.CodeParam
// a.Msg = "Activity is over"
// return
// }
// if !a.CanBuyProduct(product.ActivityID, product.ProductID) {
// return
// }
// paySource := req.PaySource
// if paySource >= common.PaySourceAll {
// a.Code = values.CodeParam
// log.Error("paysource err:%v", req.PaySource)
// return
// }
// 判断充值间隔
if db.Redis().Exist(common.GetRedisKeyPlayerPayInterval(a.UID)) {
a.Code = values.CodeParam a.Code = values.CodeParam
a.Msg = "You have an order to pay,please process first" a.Msg = "Requests are too frequent, please try again later"
return return
} }
call.AddChannel(req.PayChannel, false)
// if req.UserPhone == "" { // if req.UserPhone == "" {
// req.UserPhone = util.CheckPhone(req.UserPhone) // req.UserPhone = util.CheckPhone(req.UserPhone)
// } // }
@ -210,14 +197,18 @@ func PlayerRecharge(c *gin.Context) {
uid := a.UID uid := a.UID
util.Go(func() { util.Go(func() {
db.Redis().SetData(common.GetRedisKeyPlayerPayInterval(uid), 1, 15*time.Second) db.Redis().SetData(common.GetRedisKeyPlayerChannelPayInterval(req.PayChannel, uid), 1, 3*time.Second)
db.Redis().Incr(common.GetRedisKeyPlayerPayCount(a.UID), 1)
if payCount == 0 {
db.Redis().Expire(common.GetRedisKeyPlayerPayCount(a.UID), 30*time.Second)
}
}) })
if !config.GetBase().Release && req.PayChannel == config.GetConfig().Web.TestPay { // if !config.GetBase().Release && req.PayChannel == config.GetConfig().Web.TestPay {
util.Go(func() { // util.Go(func() {
call.RechargeCallback(payImp.Order, true, "", "") // call.RechargeCallback(payImp.Order, true, "", "")
}) // })
} // }
} }
func NewRechargeImp(req *values.RechargeReq, uid, cid int, ip string) *RechargeImp { func NewRechargeImp(req *values.RechargeReq, uid, cid int, ip string) *RechargeImp {

@ -84,13 +84,6 @@ func ShareInfo(c *gin.Context) {
} }
channel := call.GetChannelByID(a.Channel) channel := call.GetChannelByID(a.Channel)
if channel != nil { if channel != nil {
// resp.ShareLink += channel.URL + "?code=" + "xxxxxx"
// if a.Prefix != "" {
// resp.ShareLink = a.Prefix + "." + resp.ShareLink
// } else {
// resp.ShareLink = "www." + resp.ShareLink
// }
// resp.ShareLink = "https://" + resp.ShareLink
resp.ShareLink = channel.ShareUrl resp.ShareLink = channel.ShareUrl
} }
a.GetUID() a.GetUID()
@ -107,20 +100,7 @@ func ShareInfo(c *gin.Context) {
resp.RechargeCount = call.GetUserShareRecharges(a.UID, 1) resp.RechargeCount = call.GetUserShareRecharges(a.UID, 1)
resp.TotalRecharge = call.GetUserShareRechargeAmount(a.UID, 1) resp.TotalRecharge = call.GetUserShareRechargeAmount(a.UID, 1)
resp.ShareCode = shareInfo.Share resp.ShareCode = shareInfo.Share
// if channel != nil {
// num := 10000
// channelId := channel.ChannelID
// if channel.ChannelID < num {
// channelId += num
// }
// resp.ShareLink = channel.URL + "?code=" + shareInfo.Share + "&ch=" + fmt.Sprintf("%d", channelId)
// if a.Prefix != "" {
// resp.ShareLink = a.Prefix + "." + resp.ShareLink
// } else {
// resp.ShareLink = "www." + resp.ShareLink
// }
// resp.ShareLink = "https://" + resp.ShareLink
// }
num := 0 num := 0
if resp.AvailableReward > 0 { if resp.AvailableReward > 0 {
num = 1 num = 1
@ -130,6 +110,73 @@ func ShareInfo(c *gin.Context) {
} }
} }
func ShareList(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.Response()
}()
req := new(values.ShareListReq)
if !a.S(req) {
return
}
resp := &values.ShareListResp{}
a.Data = resp
type TempData struct {
Uid int `gorm:"column:UID"`
Amount int64 `gorm:"column:total_reward"`
RechargeAmount int64 `gorm:"column:total_recharge"`
}
var ret []TempData
if req.Type == 1 {
err := db.Mysql().QueryCountBySql(fmt.Sprintf("SELECT count(*) FROM share_detail WHERE FROM_UNIXTIME(Time, '%%Y-%%m-%%d') = CURDATE() and up = %d GROUP BY UID ORDER BY total_reward DESC", a.UID), &resp.Count)
if err != nil {
log.Error("err:%v", err)
}
err = db.Mysql().QueryBySql(fmt.Sprintf("SELECT UID, SUM(reward) AS total_reward, SUM(recharge_amount) AS total_recharge FROM share_detail WHERE up = %d and FROM_UNIXTIME(Time, '%%Y-%%m-%%d') = CURDATE() GROUP BY UID ORDER BY total_reward DESC limit %d,%d", a.UID, req.Page, req.Size), &ret)
if err != nil {
log.Error("err:%v", err)
}
for _, item := range ret {
resp.TodayRewardList = append(resp.TodayRewardList, values.RewardInfo{
UID: item.Uid,
Amount: item.Amount,
})
}
} else if req.Type == 2 {
err := db.Mysql().QueryCountBySql(fmt.Sprintf("SELECT count(*) FROM share_detail where up = %d GROUP BY UID ORDER BY total_reward DESC", a.UID), &resp.Count)
if err != nil {
log.Error("err:%v", err)
}
err = db.Mysql().QueryBySql(fmt.Sprintf("SELECT UID, SUM(reward) AS total_reward, SUM(recharge_amount) AS total_recharge FROM share_detail where up = %d GROUP BY UID ORDER BY total_reward DESC limit %d,%d", a.UID, req.Page, req.Size), &ret)
if err != nil {
log.Error("err:%v", err)
}
for _, item := range ret {
resp.RewardList = append(resp.RewardList, values.RewardInfo{
UID: item.Uid,
Amount: item.Amount,
})
}
} else if req.Type == 3 {
err := db.Mysql().QueryCountBySql(fmt.Sprintf("SELECT count(*) FROM share_detail where up = %d GROUP BY UID ORDER BY total_reward DESC", a.UID), &resp.Count)
if err != nil {
log.Error("err:%v", err)
}
err = db.Mysql().QueryBySql(fmt.Sprintf("SELECT UID, SUM(reward) AS total_reward, SUM(recharge_amount) AS total_recharge FROM share_detail where up = %d GROUP BY UID ORDER BY total_recharge DESC limit %d,%d", a.UID, req.Page, req.Size), &ret)
if err != nil {
log.Error("err:%v", err)
}
for _, item := range ret {
user, _ := call.GetUserXInfo(item.Uid, "birth")
resp.InviteList = append(resp.InviteList, values.InviteInfo{
UID: item.Uid,
RechargeAmount: item.RechargeAmount,
RegisterTime: user.Birth,
})
}
}
}
func GetActivityCode(c *gin.Context) { func GetActivityCode(c *gin.Context) {
a := app.NewApp(c) a := app.NewApp(c)
defer func() { defer func() {

@ -4,7 +4,9 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"server/call" "server/call"
"server/common"
"server/config" "server/config"
"server/db"
"server/modules/web/providers/base" "server/modules/web/providers/base"
utils "server/util" utils "server/util"
"strconv" "strconv"
@ -42,6 +44,7 @@ func (s *Sub) EnterGame() string {
key := AgentMap.Key key := AgentMap.Key
rtp := call.GetRtpControl(uid) rtp := call.GetRtpControl(uid)
log.Info("uid:%v,rtp:%v", uid, rtp) log.Info("uid:%v,rtp:%v", uid, rtp)
db.Redis().SetData(common.GetRedisKeyPlayerRtp(uid), rtp)
headers := map[string]string{ headers := map[string]string{
"X-Atgame-Mchid": mchid, "X-Atgame-Mchid": mchid,
"X-Atgame-Timestamp": strconv.FormatInt(timestamp, 10), "X-Atgame-Timestamp": strconv.FormatInt(timestamp, 10),

@ -89,6 +89,7 @@ func GetPlayerBalance(c *gin.Context) {
resp.Data.Uname = req.Uname resp.Data.Uname = req.Uname
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2) resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2)
a.Data = resp a.Data = resp
log.Debug("GetPlayerBalance resp:%+v", resp)
} }
func PlaceBet(c *gin.Context) { func PlaceBet(c *gin.Context) {

@ -1,11 +1,12 @@
package jili2 package jili2
const ( const (
APIRlease = "https://openapi-br.atgameapp.com/pub" APIRlease = "https://openapi.jfancygame.com"
APITest = "https://api.jgameworks.com" APITest = "https://api.jgameworks.com"
LaunchGameURL = "/api/usr/ingame" LaunchGameURL = "/api/usr/ingame"
GetGameListURL = "/api/game/loadlist" GetGameListURL = "/api/game/loadlist"
Lang = "en"
Lang = "en"
) )
type Agent struct { type Agent struct {
@ -20,5 +21,8 @@ var (
MchId: "10017", MchId: "10017",
Key: "C54E411A1B89C54BFB977EBAA7BB1D39", Key: "C54E411A1B89C54BFB977EBAA7BB1D39",
} }
AgentMapRelease = Agent{} AgentMapRelease = Agent{
MchId: "10009",
Key: "DAAD7363FB8FBD824FB9B765BBCEC186",
}
) )

@ -4,7 +4,9 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"server/call" "server/call"
"server/common"
"server/config" "server/config"
"server/db"
"server/modules/web/providers/base" "server/modules/web/providers/base"
utils "server/util" utils "server/util"
"strconv" "strconv"
@ -42,6 +44,7 @@ func (s *Sub) EnterGame() string {
key := AgentMap.Key key := AgentMap.Key
rtp := call.GetRtpControl(uid) rtp := call.GetRtpControl(uid)
log.Info("uid:%v,rtp:%v", uid, rtp) log.Info("uid:%v,rtp:%v", uid, rtp)
db.Redis().SetData(common.GetRedisKeyPlayerRtp(uid), rtp)
headers := map[string]string{ headers := map[string]string{
"X-Atgame-Mchid": mchid, "X-Atgame-Mchid": mchid,
"X-Atgame-Timestamp": strconv.FormatInt(timestamp, 10), "X-Atgame-Timestamp": strconv.FormatInt(timestamp, 10),

@ -89,6 +89,8 @@ func GetPlayerBalance(c *gin.Context) {
resp.Data.Uname = req.Uname resp.Data.Uname = req.Uname
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2) resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2)
a.Data = resp a.Data = resp
log.Debug("GetPlayerBalance resp:%+v", resp)
} }
func PlaceBet(c *gin.Context) { func PlaceBet(c *gin.Context) {

@ -1,7 +1,7 @@
package pg2 package pg2
const ( const (
APIRlease = "https://openapi-br.atgameapp.com/pub" APIRlease = "https://openapi-ind.atgameapp.com/pub"
APITest = "https://openapi.windygame.net/demo" APITest = "https://openapi.windygame.net/demo"
LaunchGameURL = "/api/usr/ingame" LaunchGameURL = "/api/usr/ingame"
GetGameListURL = "/api/game/loadlist" GetGameListURL = "/api/game/loadlist"
@ -20,5 +20,8 @@ var (
"10071", "10071",
"E3D1A83FA82F04D9725ACB5A77578A65", "E3D1A83FA82F04D9725ACB5A77578A65",
} }
AgentMapRelease = Agent{} AgentMapRelease = Agent{
"10025",
"E21B1CFF68CD984C6ADB25554BAF16C3",
}
) )

@ -48,4 +48,6 @@ func activity(e *gin.RouterGroup) {
e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw) e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw)
// 优惠券 // 优惠券
e.POST("/activity/discountTicket/info", handler.DiscountTicketInfo) e.POST("/activity/discountTicket/info", handler.DiscountTicketInfo)
// 好友冲冲冲
e.POST("/activity/inviteRank/info", handler.InviteRankInfo)
} }

@ -11,6 +11,7 @@ func share(e *gin.RouterGroup) {
e.POST("/share/platform", handler.SharePlatformInfo) e.POST("/share/platform", handler.SharePlatformInfo)
e.POST("/share/withdraw", handler.ShareWithdraw) e.POST("/share/withdraw", handler.ShareWithdraw)
e.POST("/share/activity_code", handler.GetActivityCode) e.POST("/share/activity_code", handler.GetActivityCode)
e.POST("/share/list", handler.ShareList)
// e.POST("/share/reference", handler.ShareReference) // e.POST("/share/reference", handler.ShareReference)
// e.POST("/share/report", handler.ShareReport) // e.POST("/share/report", handler.ShareReport)
// e.POST("/share/transfer", handler.ShareTransfer) // e.POST("/share/transfer", handler.ShareTransfer)

@ -325,3 +325,21 @@ type DiscountTicketResp struct {
Ticket *DiscountTicketInfo Ticket *DiscountTicketInfo
ChannelList []*common.ConfigPayChannels ChannelList []*common.ConfigPayChannels
} }
type RewardRankConfig struct {
RankMin int64
RankMax int64
Reward int64
}
type RankInfo struct {
Rank int `json:"Rank"`
Reward int `json:"Reward"`
UserName string `json:"UserName"`
}
type InviteInfoResp struct {
RewardRankConfig []RewardRankConfig
RankInfoList []RankInfo
MyRank RankInfo
}

@ -207,3 +207,26 @@ type GetActivityCodeResp struct {
type ShareCodeBindReq struct { type ShareCodeBindReq struct {
Code string Code string
} }
type ShareListReq struct {
Type int // 1 今日贡献 2 总贡献 3 邀请列表
Page int
Size int
}
type ShareListResp struct {
TodayRewardList []RewardInfo
RewardList []RewardInfo
InviteList []InviteInfo
Count int // 总数
}
type RewardInfo struct {
UID int // UID
Amount int64 // 总额
}
type InviteInfo struct {
UID int // UID
RechargeAmount int64 // 充值总额
RegisterTime int64 // 注册时间
}

Loading…
Cancel
Save