Files
kami_gateway/internal/utils/sign_verify.go
danial e88ff05a14 refactor(trace): 重命名 otel 包为 otelTrace并更新相关引用
- 将内部使用的 otel 包重命名为 otelTrace
- 更新了所有引用该包的文件中的导入路径
- 修改了部分函数和变量名称以适应新的包名
2025-02-23 21:56:29 +08:00

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