增加假Jili、假PG

dev
mofangmin 1 year ago
parent 0346c6479c
commit 6abd764baf
  1. 7
      call/config.go
  2. 1
      common/provider.go
  3. 14
      modules/web/handler/game.go
  4. 3
      modules/web/module.go
  5. 3
      modules/web/providers/all/all.go
  6. 144
      modules/web/providers/jili2/api.go
  7. 72
      modules/web/providers/jili2/base.go
  8. 143
      modules/web/providers/jili2/handler.go
  9. 14
      modules/web/providers/jili2/sign.go
  10. 24
      modules/web/providers/jili2/values.go
  11. 4
      modules/web/providers/pg2/api.go
  12. 26
      modules/web/providers/pg2/base.go
  13. 43
      modules/web/providers/pg2/values.go

@ -562,7 +562,7 @@ func LoadGames() (err error) {
for _, v := range tmplist { for _, v := range tmplist {
for _, k := range providers { for _, k := range providers {
if v.GameProvider == k.ProviderID { if v.GameProvider == k.ProviderID {
if v.GameProvider == common.ProviderPG2 || k.Open == 1 { // 特殊过滤 if v.GameProvider == common.ProviderPG2 || v.GameProvider == common.ProviderJiLi2 || k.Open == 1 { // 特殊过滤
list = append(list, v) list = append(list, v)
} }
break break
@ -625,6 +625,9 @@ func GetConfigGameProviderAll() []*common.ConfigGameProvider {
func GetConfigGameProviderAllOpen() []*common.ConfigGameProvider { func GetConfigGameProviderAllOpen() []*common.ConfigGameProvider {
ret := []*common.ConfigGameProvider{} ret := []*common.ConfigGameProvider{}
for _, v := range configGameProvider { for _, v := range configGameProvider {
if v.ProviderID == common.ProviderPG2 || v.ProviderID == common.ProviderJiLi2 {
continue
}
if v.Show == 2 { if v.Show == 2 {
continue continue
} }
@ -725,7 +728,7 @@ func GetConfigGameList(num int, cond ...int) []*common.ConfigGameList {
continue continue
} }
} }
if v.GameProvider == common.ProviderPG2 { if v.GameProvider == common.ProviderPG2 || v.GameProvider == common.ProviderJiLi2 {
continue continue
} }
ret = append(ret, v) ret = append(ret, v)

@ -36,6 +36,7 @@ const (
ProviderCMD368 ProviderCMD368
ProviderSBO ProviderSBO
ProviderPG2 ProviderPG2
ProviderJiLi2
ProviderAll ProviderAll
) )

@ -2,7 +2,6 @@ package handler
import ( import (
"fmt" "fmt"
"math/rand"
"server/call" "server/call"
"server/common" "server/common"
"server/db" "server/db"
@ -84,16 +83,21 @@ func EnterGame(c *gin.Context) {
a.Data = resp a.Data = resp
// step:特殊逻辑处理 // step:特殊逻辑处理
if req.Provider == common.ProviderPGSoft { if req.Provider == common.ProviderPGSoft {
a.Code = values.CodeParam
a.Msg = "Under Maintenance,please try later."
return
provider = call.GetConfigGameProvider(common.ProviderPG2) provider = call.GetConfigGameProvider(common.ProviderPG2)
game := call.GetConfigGameListByID(common.ProviderPG2, req.GameID) game := call.GetConfigGameListByID(common.ProviderPG2, req.GameID)
if game != nil && game.Open == 1 && rand.Intn(100) < 100 { if game != nil && game.Open == 1 {
req.Provider = common.ProviderPG2 req.Provider = common.ProviderPG2
resp.Method = provider.Method resp.Method = provider.Method
} }
} }
if req.Provider == common.ProviderJili {
provider = call.GetConfigGameProvider(common.ProviderJiLi2)
game := call.GetConfigGameListByID(common.ProviderJiLi2, req.GameID)
if game != nil && game.Open == 1 {
req.Provider = common.ProviderJiLi2
resp.Method = provider.Method
}
}
if req.IsDemo { if req.IsDemo {
log.Debug("player enter demo game %+v", *req) log.Debug("player enter demo game %+v", *req)
enter := &base.EnterGameReq{ enter := &base.EnterGameReq{

@ -37,17 +37,18 @@ func (w *Web) GetType() string {
// 很关键,需要与配置文件中的Module配置对应 // 很关键,需要与配置文件中的Module配置对应
return "web" return "web"
} }
func (w *Web) Version() string { func (w *Web) Version() string {
// 可以在监控时了解代码版本 // 可以在监控时了解代码版本
return "1.0.0" return "1.0.0"
} }
func (w *Web) OnInit(app module.App, settings *conf.ModuleSettings) { func (w *Web) OnInit(app module.App, settings *conf.ModuleSettings) {
w.BaseModule.OnInit(w, app, settings) w.BaseModule.OnInit(w, app, settings)
db.InitDB(&rdb.RedisClient{}, &edb.EsClient{}, &mdb.MysqlClient{}) db.InitDB(&rdb.RedisClient{}, &edb.EsClient{}, &mdb.MysqlClient{})
log.Info("[%v]module init finish, config:%+v", w.GetType(), config.GetConfig().Web) log.Info("[%v]module init finish, config:%+v", w.GetType(), config.GetConfig().Web)
log.Info("[%v]module init finish, base:%+v", w.GetType(), config.GetBase()) log.Info("[%v]module init finish, base:%+v", w.GetType(), config.GetBase())
// 自动初始化数据库 // 自动初始化数据库
// MigrateDB() // MigrateDB()
call.NewCaller(w) call.NewCaller(w)

@ -7,6 +7,7 @@ import (
"server/db" "server/db"
"server/modules/web/providers/base" "server/modules/web/providers/base"
"server/modules/web/providers/gs" "server/modules/web/providers/gs"
"server/modules/web/providers/jili2"
"server/modules/web/providers/pg2" "server/modules/web/providers/pg2"
"server/modules/web/providers/pgsoft" "server/modules/web/providers/pgsoft"
"server/modules/web/providers/tada" "server/modules/web/providers/tada"
@ -49,6 +50,7 @@ type AllProvider struct {
CMD368 func(b *base.Base) CMD368 func(b *base.Base)
SBO func(b *base.Base) SBO func(b *base.Base)
PG2 func(b *base.Base) PG2 func(b *base.Base)
Jili2 func(b *base.Base)
} }
var All = &AllProvider{} var All = &AllProvider{}
@ -90,6 +92,7 @@ func initAll() {
All.CMD368 = gs.NewSub All.CMD368 = gs.NewSub
All.SBO = gs.NewSub All.SBO = gs.NewSub
All.PG2 = pg2.NewSub All.PG2 = pg2.NewSub
All.Jili2 = jili2.NewSub
} }
func InitRouter(r *gin.RouterGroup) { func InitRouter(r *gin.RouterGroup) {

@ -0,0 +1,144 @@
package jili2
import (
"fmt"
"server/common"
"server/db"
"server/util"
"strconv"
"time"
)
const (
ErrCodeSuccess = 0
ErrCodePlayerNotFound = 2000 // 玩家不存在
ErrCodePlayerToken = 2001 // Token错误
ErrCodeInvalidGameID = 102 // 无效的GameDI
ErrCodeInternalError = 3000 // 内部错误
ErrCodeInsufficientBal = 2010 // 投注失败,如余额不足
)
type GameListResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data GameListData `json:"data"`
}
type GameListData struct {
GameList []GameListItem `json:"glist"`
}
type GameListItem struct {
Icon string `json:"icon"`
MapID string `json:"mapid"`
Name string `json:"name"`
Site string `json:"site"`
GameID string `json:"gameid"`
}
// EnterGameRequest 进入游戏
type EnterGameRequest struct {
Uname string `json:"uname"`
GameID string `json:"gameid"`
Token string `json:"token,omitempty"`
Lang string `json:"lang,omitempty"`
Nick string `json:"nick,omitempty"`
}
type EnterGameResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
GameURL string `json:"gameurl"`
} `json:"data"`
}
// PlaceBetRequest 下注
type PlaceBetRequest struct {
Uname string `json:"uname"`
Token string `json:"token"`
BetID string `json:"betid"`
SessionID string `json:"sessionid"`
GameID string `json:"gameid"`
Bet float64 `json:"bet"`
Award float64 `json:"award"`
IsEndRound bool `json:"is_end_round"`
Ctime int64 `json:"ctime"`
}
type PlaceBetResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
Uname string `json:"uname"`
BetID string `json:"betid"`
Balance float64 `json:"balance"`
} `json:"data"`
}
type VerifySessionReq struct {
Uname string `json:"uname"`
Token string `json:"token"`
}
type VerifySessionResp struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
Uname string `json:"uname"`
Balance float64 `json:"balance"`
} `json:"data"`
}
type GetBalanceRequest struct {
GameId string `json:"gameid"`
Uname string `json:"uname"`
}
type GetBalanceResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
Uname string `json:"uname"`
Balance float64 `json:"balance"`
} `json:"data"`
}
func GetGameList() {
API = APITest
AgentMap = AgentMapTest
url := fmt.Sprintf("%s/api/game/loadlist", APITest)
mchid := AgentMap.MchId
key := AgentMap.Key
timestamp := time.Now().Unix()
headers := map[string]string{
"X-Atgame-Mchid": mchid,
"X-Atgame-Timestamp": strconv.FormatInt(timestamp, 10),
"Content-Type": "application/json;charset=UTF-8",
}
type empty struct{}
var e empty
// Generate sign
emptyBody := "{}"
sign := GenerateSign(emptyBody, timestamp, key)
headers["X-Atgame-Sign"] = sign
var response GameListResponse
err := util.HttpPost(url, e, &response, headers)
if err != nil {
return
}
var gameList []*common.ConfigGameList
for _, item := range response.Data.GameList {
id, _ := strconv.Atoi(item.MapID)
gameList = append(gameList, &common.ConfigGameList{
GameProvider: common.ProviderJiLi2,
GameID: id,
GameCode: item.GameID,
Icon: item.Icon,
Name: item.Name,
})
}
db.Mysql().Create(gameList)
}

@ -0,0 +1,72 @@
package jili2
import (
"encoding/json"
"fmt"
"server/call"
"server/config"
"server/modules/web/providers/base"
utils "server/util"
"strconv"
"time"
"github.com/liangdas/mqant/log"
)
type Sub struct {
Base *base.Base
}
func NewSub(base *base.Base) {
base.Sub = &Sub{Base: base}
base.SubInitRouter = JiLi
}
func (s *Sub) Init() {
API = APITest
AgentMap = AgentMapTest
if config.GetBase().Release {
API = APIRlease
AgentMap = AgentMapRelease
}
}
func (s *Sub) EnterGame() string {
url := fmt.Sprintf("%s/api/usr/ingame", API)
timestamp := time.Now().Unix()
uid := s.Base.EnterGameReq.UID
token := s.Base.EnterGameReq.Token
providerID := s.Base.EnterGameReq.ProviderID
gameID := s.Base.EnterGameReq.GameID
mchid := AgentMap.MchId
key := AgentMap.Key
headers := map[string]string{
"X-Atgame-Mchid": mchid,
"X-Atgame-Timestamp": strconv.FormatInt(timestamp, 10),
"Content-Type": "application/json;charset=UTF-8",
}
// Generate sign
game := call.GetConfigGameListByID(providerID, gameID)
if game == nil {
return ""
}
request := EnterGameRequest{
Uname: fmt.Sprintf("%d", uid),
GameID: game.GameCode,
Token: token,
Lang: Lang,
Nick: "",
}
body, _ := json.Marshal(request)
sign := GenerateSign(string(body), timestamp, key)
headers["X-Atgame-Sign"] = sign
// Decode response
var response EnterGameResponse
err := utils.HttpPost(url, request, &response, headers)
if err != nil {
log.Error("err:%v", err)
return ""
}
return response.Data.GameURL
}

@ -0,0 +1,143 @@
package jili2
import (
"server/call"
"server/common"
"server/db"
"server/modules/web/app"
"server/modules/web/providers/base"
"server/util"
"strconv"
"time"
"github.com/gin-gonic/gin"
"github.com/liangdas/mqant/log"
)
func JiLi(e *gin.RouterGroup) {
e.POST("/VerifySession", VerifySession)
e.POST("/Cash/Get", GetPlayerBalance)
e.POST("/Cash/Bet", PlaceBet)
}
func GetGameID(providerID int, gameCode string) int {
game := call.GetConfigGameListByCode(providerID, gameCode)
if game != nil {
return game.GameID
}
return 0
}
func VerifySession(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.ResponseB()
}()
req := &VerifySessionReq{}
resp := &VerifySessionResp{}
a.RetData = resp
if !a.SB(req) {
resp.Code = ErrCodeInternalError
return
}
log.Debug("VerifySession req:%+v", req)
uid, err := strconv.Atoi(req.Uname)
if err != nil {
log.Error("err:%v", err)
resp.Code = ErrCodePlayerNotFound
return
}
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid))
if err != nil {
log.Error("err:%v", err)
resp.Code = ErrCodeInternalError
return
}
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2)
a.Data = resp
}
func GetPlayerBalance(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.ResponseB()
}()
req := &GetBalanceRequest{}
resp := &GetBalanceResponse{}
a.RetData = resp
if !a.SB(req) {
resp.Code = ErrCodeInternalError
return
}
log.Debug("GetPlayerBalance req:%+v", req)
uid, err := strconv.Atoi(req.Uname)
if err != nil {
log.Error("err:%v", err)
resp.Code = ErrCodePlayerNotFound
return
}
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid))
if err != nil {
log.Error("err:%v", err)
resp.Code = ErrCodeInternalError
return
}
resp.Data.Uname = req.Uname
resp.Data.Balance = call.GetUserCurrencyFloat(uid, common.CurrencyType(currency), 2)
a.Data = resp
}
func PlaceBet(c *gin.Context) {
a := app.NewApp(c)
defer func() {
a.ResponseB()
}()
req := &PlaceBetRequest{}
resp := &PlaceBetResponse{}
a.RetData = resp
if !a.SB(req) {
resp.Code = ErrCodeInternalError
return
}
log.Debug("PlaceBet:%+v", req)
// 验证token
uid, _ := db.Redis().GetInt(common.GetRedisKeyToken(req.Token))
if uid == 0 {
resp.Code = ErrCodePlayerNotFound
return
}
provider := call.GetConfigGameProvider(common.ProviderJiLi2)
now := time.Now().Unix()
betReq := &base.BetReq{
UID: uid,
CurrencyType: common.CurrencyINR,
BetAmount: int64(req.Bet * common.DecimalDigits),
TurnOver: int64(req.Bet * common.DecimalDigits),
SettleAmount: int64(req.Award * common.DecimalDigits),
SessionType: common.SessionTypeSettle,
GameID: GetGameID(common.ProviderJiLi2, req.GameID),
GameName: req.GameID,
Provider: provider,
BetID: req.BetID,
SessionID: req.SessionID,
Time: now,
}
betResp := base.SessionBet(betReq)
if betResp.Code != base.CodeOk {
resp.Code = ErrCodeInternalError
if betResp.Code == base.CodeAccepted {
resp.Code = ErrCodeInternalError
} else if betResp.Code == base.CodeNotEnoughAmount {
resp.Code = ErrCodeInsufficientBal
}
return
}
resp.Data.Balance = util.Decimal(float64(betResp.Balance)/common.DecimalDigits, 2)
a.Data = resp
}

@ -0,0 +1,14 @@
package jili2
import (
"crypto/md5"
"encoding/hex"
"strconv"
"strings"
)
func GenerateSign(body string, timestamp int64, key string) string {
data := body + strconv.FormatInt(timestamp, 10) + key
hash := md5.Sum([]byte(data))
return strings.ToUpper(hex.EncodeToString(hash[:]))
}

@ -0,0 +1,24 @@
package jili2
const (
APIRlease = "https://openapi-br.atgameapp.com/pub"
APITest = "https://api.jgameworks.com"
LaunchGameURL = "/api/usr/ingame"
GetGameListURL = "/api/game/loadlist"
Lang = "en"
)
type Agent struct {
MchId string `json:"mch_id"`
Key string `json:"key"`
}
var (
API = ""
AgentMap Agent
AgentMapTest = Agent{
MchId: "10017",
Key: "C54E411A1B89C54BFB977EBAA7BB1D39",
}
AgentMapRelease = Agent{}
)

@ -108,8 +108,8 @@ func GetGameList() {
API = APITest API = APITest
AgentMap = AgentMapTest AgentMap = AgentMapTest
url := fmt.Sprintf("%s/api/game/loadlist", APITest) url := fmt.Sprintf("%s/api/game/loadlist", APITest)
mchid := "" mchid := AgentMap.MchId
key := "" key := AgentMap.Key
timestamp := time.Now().Unix() timestamp := time.Now().Unix()
headers := map[string]string{ headers := map[string]string{
"X-Atgame-Mchid": mchid, "X-Atgame-Mchid": mchid,

@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"server/call" "server/call"
"server/common"
"server/config" "server/config"
"server/modules/web/providers/base" "server/modules/web/providers/base"
utils "server/util" utils "server/util"
@ -39,29 +38,8 @@ func (s *Sub) EnterGame() string {
token := s.Base.EnterGameReq.Token token := s.Base.EnterGameReq.Token
providerID := s.Base.EnterGameReq.ProviderID providerID := s.Base.EnterGameReq.ProviderID
gameID := s.Base.EnterGameReq.GameID gameID := s.Base.EnterGameReq.GameID
/** mchid := AgentMap.MchId
玩家再次点击游戏根据玩家盈利倍数盈利倍数=玩家余额+已提现金额/玩家总充值金额调取假PG不同档位的接口 key := AgentMap.Key
1盈利倍数1进入90%档位
2盈利倍数1-7进入80%档位
3盈利倍数7-10进入60%档位
4盈利倍数10进入30%档位
*/
rechargeInfo := call.GetRechargeInfo(uid)
cash := call.GetUserCurrency(uid, common.CurrencyINR)
earnBet := (rechargeInfo.TotalWithdraw + cash) / rechargeInfo.TotalRecharge
log.Info("uid:%d,earnBet:%d", uid, earnBet)
mchid := ""
key := ""
if earnBet <= 7 {
mchid = AgentMap[80].MchId
key = AgentMap[80].Key
} else if earnBet <= 10 {
mchid = AgentMap[60].MchId
key = AgentMap[60].Key
} else {
mchid = AgentMap[30].MchId
key = AgentMap[30].Key
}
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),

@ -5,7 +5,7 @@ const (
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"
Lang = "pt" Lang = "en"
) )
type Agent struct { type Agent struct {
@ -15,41 +15,10 @@ type Agent struct {
var ( var (
API = "" API = ""
AgentMap map[int]Agent AgentMap Agent
AgentMapTest = map[int]Agent{ AgentMapTest = Agent{
90: { "10055",
"10055", "170779CCC5E9FE29DBB3F5FEDBB304A0",
"170779CCC5E9FE29DBB3F5FEDBB304A0",
},
80: {
"10055",
"170779CCC5E9FE29DBB3F5FEDBB304A0",
},
60: {
"10055",
"170779CCC5E9FE29DBB3F5FEDBB304A0",
},
30: {
"10055",
"170779CCC5E9FE29DBB3F5FEDBB304A0",
},
}
AgentMapRelease = map[int]Agent{
90: {
"10270",
"ECFEF01A0842C8F7BC9A4EFC089D7E6D",
},
80: {
"10269",
"0A18B714E125D9C99ABC41E7124D1B15",
},
60: {
"10268",
"AC846D0F6C83C2F65A7B07AB530DB978",
},
30: {
"10267",
"30C9928DC1240B507889D4768A186139",
},
} }
AgentMapRelease = Agent{}
) )

Loading…
Cancel
Save