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 // }