72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package sdk
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
func GenSignature(param *Params) string {
|
|
if param.Headers() == nil {
|
|
return ""
|
|
}
|
|
|
|
if param.secretKey == "" {
|
|
panic("secretKey不能为空")
|
|
}
|
|
|
|
var sortedKeys []string
|
|
for key, _ := range param.Headers() {
|
|
sortedKeys = append(sortedKeys, key)
|
|
}
|
|
sort.Strings(sortedKeys)
|
|
|
|
var params []string
|
|
for _, key := range sortedKeys {
|
|
if key != signatureHeader {
|
|
params = append(params, key+"="+strings.Trim(param.Headers()[key], " "))
|
|
}
|
|
}
|
|
params = append(params, "RequestMethod="+strings.Trim(param.requestMethod, " "))
|
|
params = append(params, "Uri="+strings.Trim(param.uri, " "))
|
|
if len(param.requestBody) <= 0 {
|
|
params = append(params, "RequestBody=")
|
|
} else {
|
|
body := param.requestBody
|
|
// 去除空格
|
|
body = strings.Replace(body, " ", "", -1)
|
|
// 去除换行符
|
|
body = strings.Replace(body, "\n", "", -1)
|
|
// 去除制表符
|
|
body = strings.Replace(body, "\t", "", -1)
|
|
// 去除回车符
|
|
body = strings.Replace(body, "\r", "", -1)
|
|
params = append(params, "RequestBody="+body)
|
|
}
|
|
|
|
return HmacSha256ToHex(param.secretKey+"&", strings.Trim(strings.Join(params, "&"), " "))
|
|
}
|
|
|
|
// HmacSha256 计算HmacSha256
|
|
// key 是加密所使用的key
|
|
// data 是加密的内容
|
|
func HmacSha256(key string, data string) []byte {
|
|
mac := hmac.New(sha256.New, []byte(key))
|
|
_, _ = mac.Write([]byte(data))
|
|
|
|
return mac.Sum(nil)
|
|
}
|
|
|
|
// HmacSha256ToHex 将加密后的二进制转16进制字符串
|
|
func HmacSha256ToHex(key string, data string) string {
|
|
return hex.EncodeToString(HmacSha256(key, data))
|
|
}
|
|
|
|
func RequestHeaders(params *Params) map[string]string {
|
|
genSignature := GenSignature(params)
|
|
params.Signature(genSignature)
|
|
return params.Headers()
|
|
}
|