diff --git a/sdk/client.go b/sdk/client.go index e61aedc1f0cbb8467231264de8209e8c17a61185..dca55a89726d5b1176cefa41a808118149546212 100644 --- a/sdk/client.go +++ b/sdk/client.go @@ -2,12 +2,15 @@ package sdk import ( "crypto/md5" + "encoding/hex" "fmt" "io/ioutil" + "math/rand" "net/http" "net/url" - "sort" + "strconv" "strings" + "time" ) const ( @@ -99,27 +102,21 @@ func (c *Client) Request(apiUrl string, params map[string]string, method string) } func (c *Client) makeSign(params map[string]string) (string, map[string]string) { - var keys []string - var data string - if _, ok := params["appKey"]; !ok { - params["appKey"] = c.appKey - } + rand.Seed(time.Now().UnixNano()) + timer := strconv.Itoa(int(time.Now().UnixMilli())) + nonce := strconv.Itoa(rand.Intn(900000) + 100000) + signRan := fmt.Sprintf("appKey=%s&timer=%s&nonce=%s&key=%s", c.appKey, timer, nonce, c.appSecret) + hash := md5.New() + hash.Write([]byte(signRan)) + md5Hash := hash.Sum(nil) + md5HashString := hex.EncodeToString(md5Hash) + signRan = strings.ToUpper(md5HashString) + params["appKey"] = c.appKey + params["nonce"] = nonce + params["signRan"] = signRan + params["timer"] = timer if _, ok := params["version"]; !ok { params["version"] = c.version } - for key, _ := range params { - keys = append(keys, key) - } - sort.Strings(keys) - //拼接 - for _, k := range keys { - data = fmt.Sprintf("%s%s=%s&", data, k, params[k]) - } - data = fmt.Sprintf("%skey=%s", data, c.appSecret) - data = strings.Trim(data, "&") - m := md5.New() - m.Write([]byte(data)) - sign := strings.ToUpper(fmt.Sprintf("%x", m.Sum(nil))) - params["sign"] = sign - return sign, params + return signRan, params }