mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-09 15:12:26 +08:00
fix some bugs (#277)
* fix payRequset xml marshal: root element should be xml * support HMAC-SHA256 for unifiedorder api * support HMAC-SHA256 for PaidVerifySign * fix SignType is nil * fix code style * constantize SignType * add comments * fix code style
This commit is contained in:
@@ -3,65 +3,31 @@ package util
|
||||
import (
|
||||
"bytes"
|
||||
"sort"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// OrderParam order params
|
||||
func OrderParam(source interface{}, bizKey string) (returnStr string) {
|
||||
switch v := source.(type) {
|
||||
case map[string]string:
|
||||
keys := make([]string, 0, len(v))
|
||||
for k := range v {
|
||||
if k == "sign" {
|
||||
continue
|
||||
}
|
||||
keys = append(keys, k)
|
||||
func OrderParam(p map[string]string, bizKey string) (returnStr string) {
|
||||
keys := make([]string, 0, len(p))
|
||||
for k := range p {
|
||||
if k == "sign" {
|
||||
continue
|
||||
}
|
||||
sort.Strings(keys)
|
||||
var buf bytes.Buffer
|
||||
for _, k := range keys {
|
||||
if v[k] == "" {
|
||||
continue
|
||||
}
|
||||
if buf.Len() > 0 {
|
||||
buf.WriteByte('&')
|
||||
}
|
||||
buf.WriteString(k)
|
||||
buf.WriteByte('=')
|
||||
buf.WriteString(v[k])
|
||||
}
|
||||
buf.WriteString(bizKey)
|
||||
returnStr = buf.String()
|
||||
case map[string]interface{}:
|
||||
keys := make([]string, 0, len(v))
|
||||
for k := range v {
|
||||
if k == "sign" {
|
||||
continue
|
||||
}
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
var buf bytes.Buffer
|
||||
for _, k := range keys {
|
||||
if v[k] == "" {
|
||||
continue
|
||||
}
|
||||
if buf.Len() > 0 {
|
||||
buf.WriteByte('&')
|
||||
}
|
||||
buf.WriteString(k)
|
||||
buf.WriteByte('=')
|
||||
switch vv := v[k].(type) {
|
||||
case string:
|
||||
buf.WriteString(vv)
|
||||
case int:
|
||||
buf.WriteString(strconv.FormatInt(int64(vv), 10))
|
||||
default:
|
||||
panic("params type not supported")
|
||||
}
|
||||
}
|
||||
buf.WriteString(bizKey)
|
||||
returnStr = buf.String()
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
var buf bytes.Buffer
|
||||
for _, k := range keys {
|
||||
if p[k] == "" {
|
||||
continue
|
||||
}
|
||||
if buf.Len() > 0 {
|
||||
buf.WriteByte('&')
|
||||
}
|
||||
buf.WriteString(k)
|
||||
buf.WriteByte('=')
|
||||
buf.WriteString(p[k])
|
||||
}
|
||||
buf.WriteString(bizKey)
|
||||
returnStr = buf.String()
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user