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.
57 lines
1.1 KiB
57 lines
1.1 KiB
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 |
|
}
|
|
|