99 lines
2.5 KiB
Go
99 lines
2.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"context"
|
|
"gateway/internal/otelTrace"
|
|
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/duke-git/lancet/v2/convertor"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func GetMD5Sign(params map[string]any, keys []string, paySecret string) string {
|
|
sort.Strings(keys)
|
|
str := ""
|
|
for i := 0; i < len(keys); i++ {
|
|
k := keys[i]
|
|
if len(convertor.ToString(params[k])) == 0 || k == "sign" {
|
|
continue
|
|
}
|
|
str += k + "=" + convertor.ToString(params[k]) + "&"
|
|
}
|
|
str += "paySecret=" + paySecret
|
|
sign := GetMD5Upper(str)
|
|
return sign
|
|
}
|
|
|
|
func GetMD5SignLower(params map[string]any, keys []string, paySecret string) string {
|
|
return strings.ToLower(GetMD5Sign(params, keys, paySecret))
|
|
}
|
|
|
|
func Md5Verify(params map[string]any, paySecret string) bool {
|
|
//生成map一个copy
|
|
paramsCopy := make(map[string]any)
|
|
for k, v := range params {
|
|
paramsCopy[k] = v
|
|
}
|
|
sign := paramsCopy["sign"]
|
|
if sign == "" {
|
|
return false
|
|
}
|
|
delete(paramsCopy, "sign")
|
|
keys := SortMap(paramsCopy)
|
|
tmpSign := GetMD5Sign(paramsCopy, keys, paySecret)
|
|
return tmpSign == sign
|
|
}
|
|
|
|
func Md5MFVerify(ctx context.Context, params map[string]any, paySecret string) bool {
|
|
//生成map一个copy
|
|
paramsCopy := make(map[string]any)
|
|
for k, v := range params {
|
|
paramsCopy[k] = v
|
|
}
|
|
sign := paramsCopy["sign"]
|
|
if sign == "" {
|
|
return false
|
|
}
|
|
delete(paramsCopy, "sign")
|
|
delete(paramsCopy, "deviceId")
|
|
delete(paramsCopy, "ip")
|
|
tmpSign := GetMD5SignMF(paramsCopy, paySecret)
|
|
otelTrace.Logger.WithContext(ctx).Info("signStr=%s tmpStr=%s, %s", zap.String("signStr", tmpSign), zap.Any("tmpStr", sign), zap.Bool("sign!=tmpSign", tmpSign != sign))
|
|
return tmpSign == sign
|
|
}
|
|
|
|
// Md5TMPMFVerify TODO: 兼容之前验证的代码
|
|
func Md5TMPMFVerify(ctx context.Context, params map[string]any, paySecret string) bool {
|
|
//生成map一个copy
|
|
paramsCopy := make(map[string]any)
|
|
for k, v := range params {
|
|
paramsCopy[k] = v
|
|
}
|
|
sign := paramsCopy["sign"]
|
|
if sign == "" {
|
|
return false
|
|
}
|
|
delete(paramsCopy, "sign")
|
|
delete(paramsCopy, "deviceId")
|
|
tmpSign := GetMD5SignMF(paramsCopy, paySecret)
|
|
otelTrace.Logger.WithContext(ctx).Info("signStr=%s tmpStr=%s, %s", zap.String("signStr", tmpSign), zap.Any("tmpStr", sign), zap.Bool("sign!=tmpSign", tmpSign != sign))
|
|
return tmpSign == sign
|
|
}
|
|
|
|
func GetMD5SignMF(params map[string]any, paySecret string) string {
|
|
strArr := SortMap(params)
|
|
signStr := ""
|
|
for i := 0; i < len(strArr); i++ {
|
|
k := strArr[i]
|
|
if len(convertor.ToString(params[k])) == 0 {
|
|
signStr += k
|
|
} else {
|
|
signStr += k + convertor.ToString(params[k])
|
|
}
|
|
}
|
|
signStr += paySecret
|
|
return GetMD5LOWER(signStr)
|
|
}
|