You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
4.5 KiB
210 lines
4.5 KiB
package sn |
|
|
|
import ( |
|
"crypto/md5" |
|
"encoding/hex" |
|
"encoding/json" |
|
"fmt" |
|
"github.com/liangdas/mqant/log" |
|
"sort" |
|
"strings" |
|
) |
|
|
|
const ( |
|
APIRlease = "https://api.nbetps.com/v2/launch_game" |
|
APITest = "https://api.nbetps.com/v2/launch_game" |
|
|
|
APICreateUserRlease = "https://api.nbetps.com/v1/create_user" |
|
APICreateUserTest = "https://api.nbetps.com/v1/create_user" |
|
|
|
APIControlRlease = "https://api.nbetps.com/v1/control" |
|
APIControlTest = "https://api.nbetps.com/v1/control" |
|
|
|
// LaunchGameURL = "/api/usr/ingame" |
|
// GetGameListURL = "/api/game/loadlist" |
|
// Lang = "hi" |
|
) |
|
|
|
type Agent struct { |
|
MchId string `json:"mch_id"` |
|
Key string `json:"key"` |
|
} |
|
|
|
var ( |
|
API = "" |
|
APICreate = "" |
|
APIControl = "" |
|
AgentMap Agent |
|
AgentMapTest = Agent{ |
|
MchId: "slotgolden777test", |
|
Key: "010804d1-7bbf-4ed5-9b50-60fbd2b22e34", |
|
} |
|
AgentMapRelease = Agent{ |
|
MchId: "slotgolden777", |
|
Key: "ddeaeb76-5624-41fe-a6ea-7ad9307d7701", |
|
} |
|
) |
|
|
|
func getSignStr(str string, pass ...string) string { |
|
m := map[string]json.RawMessage{} |
|
sortStrs := []string{} |
|
json.Unmarshal([]byte(str), &m) |
|
for i := range m { |
|
sortStrs = append(sortStrs, i) |
|
} |
|
signStr := "" |
|
sort.Strings(sortStrs) |
|
for _, v := range sortStrs { |
|
shouldPass := false |
|
for _, s := range pass { |
|
if v == s { |
|
shouldPass = true |
|
break |
|
} |
|
} |
|
if shouldPass { |
|
continue |
|
} |
|
if len(m[v]) > 1 && m[v][0] == 34 { |
|
m[v] = m[v][1 : len(m[v])-1] |
|
} |
|
if len(m[v]) == 0 { |
|
continue |
|
} |
|
signStr += fmt.Sprintf("%v=%v", v, string(m[v])) |
|
signStr += "&" |
|
} |
|
signStr = signStr[:len(signStr)-1] |
|
return signStr |
|
} |
|
|
|
//func GeneratedSign(str string) string { |
|
// signStr := getSignStr(str, "sign") + "&key=" + SignKey |
|
// md5Value := createMd5(signStr) |
|
// md5Value = strings.ToUpper(createMd5(md5Value)) |
|
// log.Debug("sn signStr:%s, md5:%s", signStr, md5Value) |
|
// return md5Value |
|
//} |
|
|
|
func GeneratedSignMap(params map[string]interface{}) string { |
|
keys := make([]string, 0, len(params)) |
|
for k := range params { |
|
if k != "" && k != "sign" && params[k] != nil { |
|
keys = append(keys, k) |
|
} |
|
} |
|
sort.Strings(keys) |
|
var result string |
|
for _, v := range keys { |
|
if result != "" { |
|
result += "&" |
|
} |
|
var value string |
|
switch params[v].(type) { |
|
case float64: |
|
value = fmt.Sprintf("%d", int64(params[v].(float64))) |
|
case int64: |
|
value = fmt.Sprintf("%d", params[v].(int64)) |
|
default: |
|
value = fmt.Sprintf("%v", params[v]) |
|
} |
|
|
|
result += v + "=" + value |
|
} |
|
return result |
|
} |
|
|
|
func GeneratedSign(params map[string]interface{}, key string) string { |
|
keys := make([]string, 0, len(params)) |
|
for k := range params { |
|
if k != "" && k != "sign" && params[k] != nil { |
|
keys = append(keys, k) |
|
} |
|
} |
|
sort.Strings(keys) |
|
var sign string |
|
for _, v := range keys { |
|
var value string |
|
switch params[v].(type) { |
|
case float64: |
|
value = fmt.Sprintf("%d", int64(params[v].(float64))) |
|
case int64: |
|
value = fmt.Sprintf("%d", params[v].(int64)) |
|
case []interface{}, map[string]interface{}: |
|
data, _ := json.Marshal(params[v]) |
|
value = string(data) |
|
default: |
|
log.Debug("params[%s]: type=%T, value=%+v", v, params[v], params[v]) |
|
value = fmt.Sprintf("%v", params[v]) |
|
} |
|
sign += v + "=" + value + "&" |
|
} |
|
sign += "key=" + key |
|
result := strings.ToUpper(createMd5(sign)) |
|
log.Debug("signStr:%v sign:%s\n", sign, result) |
|
|
|
return result |
|
} |
|
|
|
// createMd5 生成md5字符串 |
|
func createMd5(str string) string { |
|
h := md5.New() |
|
h.Write([]byte(str)) |
|
return hex.EncodeToString(h.Sum(nil)) |
|
} |
|
|
|
// var ( |
|
// RtpMap = map[int]int{ |
|
// 97: 11, |
|
// 96: 12, |
|
// 95: 13, |
|
// 93: 14, |
|
// 90: 15, |
|
// 85: 16, |
|
// 80: 17, |
|
// 60: 18, |
|
// 40: 19, |
|
// } |
|
// rtps = []int{97, 96, 95, 93, 90, 85, 80, 60, 40} |
|
// LevelMap = map[int]int{ |
|
// 11: 97, |
|
// 12: 96, |
|
// 13: 95, |
|
// 14: 93, |
|
// 15: 90, |
|
// 16: 85, |
|
// 17: 80, |
|
// 18: 60, |
|
// 19: 40, |
|
// } |
|
// ) |
|
|
|
// func GetLevel(uid int) int { |
|
// rtp := call.GetProviderGameRtp(uid) |
|
// if rtp >= rtps[0] { |
|
// return RtpMap[97] |
|
// } else if rtp <= rtps[len(rtps)-1] { |
|
// return RtpMap[40] |
|
// } |
|
// for i := 1; i < len(rtps); i++ { |
|
// if rtp <= rtps[i-1] && rtp >= rtps[i] { |
|
// return RtpMap[rtps[i]] |
|
// } |
|
// } |
|
// return 15 |
|
// } |
|
|
|
// func GetRtp(uid int) int { |
|
// rtp := call.GetProviderGameRtp(uid) |
|
// if rtp >= rtps[0] { |
|
// return LevelMap[RtpMap[97]] |
|
// } else if rtp <= rtps[len(rtps)-1] { |
|
// return LevelMap[RtpMap[40]] |
|
// } |
|
// for i := 1; i < len(rtps); i++ { |
|
// if rtp <= rtps[i-1] && rtp >= rtps[i] { |
|
// return LevelMap[RtpMap[rtps[i]]] |
|
// } |
|
// } |
|
// return 90 |
|
// }
|
|
|