/
utils.go
51 lines (37 loc) · 932 Bytes
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package mch
import (
"fmt"
"sort"
"strings"
"github.com/arden/wechat/utils"
)
// SignWithMD5 生成MD5签名
func SignWithMD5(m utils.WXML, apikey string) string {
signature := utils.MD5(buildSignStr(m, apikey))
return strings.ToUpper(signature)
}
// SignWithHMacSHA256 生成HMAC-SHA256签名
func SignWithHMacSHA256(m utils.WXML, apikey string) string {
signature := utils.HMAC(utils.AlgoSha256, buildSignStr(m, apikey), apikey)
return strings.ToUpper(signature)
}
// Sign 生成签名
func buildSignStr(m utils.WXML, apikey string) string {
l := len(m)
ks := make([]string, 0, l)
kvs := make([]string, 0, l)
for k := range m {
if k == "sign" {
continue
}
ks = append(ks, k)
}
sort.Strings(ks)
for _, k := range ks {
if v, ok := m[k]; ok && v != "" {
kvs = append(kvs, fmt.Sprintf("%s=%s", k, v))
}
}
kvs = append(kvs, fmt.Sprintf("key=%s", apikey))
return strings.Join(kvs, "&")
}