68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
// 生成签名用
|
|
package webapi
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/md5"
|
|
"encoding/hex"
|
|
"io"
|
|
"net/url"
|
|
"sort"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// 生成签名
|
|
func MakeSig(appId, action string, params map[string]string, data []byte, ts int) string {
|
|
h := md5.New()
|
|
io.WriteString(h, action)
|
|
io.WriteString(h, strconv.Itoa(ts))
|
|
io.WriteString(h, appId)
|
|
if len(params) > 0 {
|
|
vals := []string{}
|
|
for _, v := range params {
|
|
vals = append(vals, v)
|
|
}
|
|
//sort
|
|
sort.Strings(vals)
|
|
|
|
cnt := len(vals)
|
|
for i := 0; i < cnt; i++ {
|
|
io.WriteString(h, vals[i])
|
|
}
|
|
}
|
|
if len(data) > 0 {
|
|
h.Write(data)
|
|
}
|
|
//println()
|
|
return hex.EncodeToString(h.Sum(nil))
|
|
}
|
|
|
|
// 生成请求串
|
|
func MakeURL(appId, action string, params map[string]string, data []byte) string {
|
|
var buf bytes.Buffer
|
|
buf.WriteString(Config.GameApiURL)
|
|
buf.WriteString(action)
|
|
buf.WriteString("?")
|
|
if len(params) > 0 {
|
|
for k, v := range params {
|
|
buf.WriteString(k)
|
|
buf.WriteString("=")
|
|
buf.WriteString(url.QueryEscape(v))
|
|
buf.WriteString("&")
|
|
}
|
|
}
|
|
ts := time.Now().Nanosecond()
|
|
buf.WriteString("nano=" + strconv.Itoa(ts) + "&")
|
|
buf.WriteString("sign=")
|
|
buf.WriteString(url.QueryEscape(MakeSig(appId, action, params, data, ts)))
|
|
return buf.String()
|
|
}
|
|
func MakeMd5String(strs ...string) string {
|
|
buff := md5.New()
|
|
for _, value := range strs {
|
|
io.WriteString(buff, value)
|
|
}
|
|
return hex.EncodeToString(buff.Sum(nil))
|
|
}
|