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

46 lines
922 B

package wechatpayapiv2
import (
"bytes"
"fmt"
"go.dtapp.net/gomd5"
"sort"
"strings"
)
// 支付字符串拼接
func (c *Client) getSortString(m map[string]interface{}) string {
var buf bytes.Buffer
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
vs := m[k]
if vs == "" {
continue
}
if buf.Len() > 0 {
buf.WriteByte('&')
}
buf.WriteString(k)
buf.WriteByte('=')
buf.WriteString(fmt.Sprintf("%v", vs))
}
return buf.String()
}
// 获取签名
func (c *Client) getMd5Sign(paramMap map[string]interface{}) string {
sortString := c.getSortString(paramMap)
sign := gomd5.Md5(sortString + "&key=" + c.GetMchKey())
return strings.ToUpper(sign)
}
// 验证签名
func (c *Client) checkMd5Sign(rspMap map[string]interface{}, sign string) bool {
calculateSign := c.getMd5Sign(rspMap)
return calculateSign == sign
}