印度包网
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.

58 lines
1.1 KiB

1 year ago
package base
import (
"fmt"
"reflect"
"sort"
"strings"
"github.com/liangdas/mqant/log"
)
func GetSignStr(send interface{}) string {
m := StructToMapJson(send)
str := []string{}
for i := range m {
if i == "sign" {
continue
}
str = append(str, i)
}
sort.Strings(str)
signStr := ""
for i, v := range str {
signStr += fmt.Sprintf("%v=%v", v, m[v])
if i != len(str)-1 {
signStr += "&"
}
}
log.Debug("signStr:%s", signStr)
return signStr
}
func StructToMapJson(obj interface{}) map[string]interface{} {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
if t.Kind() == reflect.Ptr {
t = t.Elem()
v = v.Elem()
}
var result = make(map[string]interface{})
for i := 0; i < t.NumField(); i++ {
if v.Field(i).Kind() == reflect.Ptr && v.Field(i).IsNil() {
continue
}
tagName := t.Field(i).Tag.Get("json")
if tagName != "" && tagName != "-" && !v.Field(i).IsZero() {
data := v.Field(i).Interface()
if v.Field(i).Kind() == reflect.Struct {
data = GetSignStr(data)
}
name := strings.Split(tagName, ",")
result[name[0]] = data
}
}
return result
}