2025-03-07 17:23:50 +08:00

87 lines
2.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package app
import (
"case-admin-api/config"
"case-admin-api/utils"
"encoding/json"
"sort"
"strings"
)
//const (
// apiUrl = "https://dev-wx.igandan.com" // 接口地址
// secretKey = "RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
// platform = "suanyisuan" // 所属平台
// imagePrefix = "https://dev-doc.igandan.com/app" // 图片地址前缀
//)
// GenSignature 生成签名信息
func GenSignature(params map[string]interface{}) (string, error) {
// 对map的key进行排序包括多层嵌套的情况
data := sortMapRecursively(params)
// 转换为JSON
jsonData, err := json.Marshal(data)
if err != nil {
return "", err
}
sing := utils.HmacSHA256(string(jsonData), config.C.App.SecretKey)
return sing, nil
}
// sortMapRecursively 对map的key进行排序包括多层嵌套的情况
func sortMapRecursively(data map[string]interface{}) map[string]interface{} {
sortedMap := make(map[string]interface{})
keys := make([]string, 0, len(data))
// 收集所有的key
for key := range data {
keys = append(keys, key)
}
// 对key进行排序
sort.Strings(keys)
// 通过排序后的key插入新map中
for _, key := range keys {
value := data[key]
switch valueTyped := value.(type) {
case map[string]interface{}:
// 如果是嵌套的map递归调用
sortedMap[key] = sortMapRecursively(valueTyped)
case []interface{}:
// 如果是嵌套的slice对其中的map进行递归调用
for i, v := range valueTyped {
if vMap, ok := v.(map[string]interface{}); ok {
valueTyped[i] = sortMapRecursively(vMap)
}
}
sortedMap[key] = valueTyped
default:
// 否则直接插入
sortedMap[key] = value
}
}
return sortedMap
}
// HandleImagePrefix 处理app图片前缀
func HandleImagePrefix(u string) (string, error) {
if u == "" {
return "", nil
}
// 去除oss前缀
u = utils.RemoveOssDomain(u)
imgPath := strings.Replace(u, config.C.App.ImagePrefix, "", 1)
if imgPath == "/null" {
return "", nil
}
return imgPath, nil
}