在對接PHP語言實(shí)現(xiàn)的簽名的時候,看見對方用了ksort,由于golang里面對map的遍歷是無序的,所以用golang實(shí)現(xiàn)了對map按key值進(jìn)行升序排序:
package main
import (
"crypto/sha1"
"encoding/hex"
"fmt"
"sort"
"strconv"
"time"
)
func main() {
timeStamp := time.Now().Unix()
params := map[string]string{
"staff_name": "hhh",
"client_id": "123",
"staff_id": "114",
"time": strconv.FormatInt(timeStamp, 10),
"secret": "aaa-999",
"sign": "",
}
var dataParams string
//ksort
var keys []string
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
//拼接
for _, k := range keys {
fmt.Println("key:", k, "Value:", params[k])
dataParams = dataParams + k + "=" + params[k] + "&"
}
fmt.Println(dataParams)
ff := dataParams[0 : len(dataParams)-1]
fmt.Println("去掉最后一個&:", ff)
//對字符串進(jìn)行sha1哈希
h := sha1.New()
h.Write([]byte(dataParams))
bs := h.Sum(nil)
sign := hex.EncodeToString(bs)
//拼接請求參數(shù)
dataPost := dataParams + "&sign" + "=" + sign
fmt.Println(dataPost)
}
排序結(jié)果如下:
key: client_id Value: 123
key: secret Value: aaa-999
key: sign Value:
key: staff_id Value: 114
key: staff_name Value: hhh
key: time Value: 1554100502
sh1哈希結(jié)果:
3c8cfd20311b2ac0c74df290686e34a61a55ad71