mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-04 12:52:27 +08:00
68 lines
1.2 KiB
Go
68 lines
1.2 KiB
Go
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)
|
|
}
|
|
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()
|
|
}
|
|
return
|
|
}
|