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
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
|
||
|
|
}
|