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.
meituan/sign.go

47 lines
938 B

package meituan
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"io"
"sort"
"strconv"
)
// 签名(sign)生成逻辑(新版)
// https://union.meituan.com/v2/apiDetail?id=27
func (c *Client) getSign(Secret string, params map[string]interface{}) string {
// 参数按照参数名的字典升序排列
var keys []string
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
signStr := bytes.NewBufferString(Secret)
for _, k := range keys {
signStr.WriteString(k)
signStr.WriteString(c.getString(params[k]))
}
signStr.WriteString(Secret)
// md5加密
has := md5.New()
io.Copy(has, signStr)
return hex.EncodeToString(has.Sum(nil))
}
func (c *Client) getString(i interface{}) string {
switch v := i.(type) {
case string:
return v
case int:
return strconv.Itoa(v)
case bool:
return strconv.FormatBool(v)
default:
marshal, _ := json.Marshal(v)
return string(marshal)
}
}