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

60 lines
1.3 KiB

package kashangwl
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"go.dtapp.net/gorequest"
"io"
"net/url"
"sort"
"strconv"
"strings"
)
// md5(key + 参数1名称 + 参数1值 + 参数2名称 + 参数2值...) 加密源串应为{key}customer_id1192442order_id827669582783timestamp1626845767
func (c *Client) getSign(customerKey string, params map[string]interface{}) string {
// 参数按照参数名的字典升序排列
var keys []string
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
// 拼接
query := bytes.NewBufferString(customerKey)
for _, k := range keys {
query.WriteString(k)
query.WriteString(gorequest.GetParamsString(params[k]))
}
// MD5加密
h := md5.New()
io.Copy(h, query)
return strings.ToLower(hex.EncodeToString(h.Sum(nil)))
}
// 获取请求数据
func (c *Client) getRequestData(params map[string]interface{}) string {
// 公共参数
args := url.Values{}
// 请求参数
for key, val := range params {
args.Set(key, c.getString(val))
}
return args.Encode()
}
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)
}
}