93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package app
|
||
|
||
import (
|
||
"encoding/json"
|
||
"sort"
|
||
"strings"
|
||
"vote-video-api/config"
|
||
"vote-video-api/utils"
|
||
)
|
||
|
||
const (
|
||
apiUrl = "https://dev-wx.igandan.com" // 接口地址
|
||
secretKey = "RY8pcn04#TSdzHVX6YgWnyCue9!T&QP^" // 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
|
||
platform = "suanyisuan" // 所属平台
|
||
devImagePrefix = "https://dev-doc.igandan.com/app" // 测试环境图片地址前缀
|
||
prodImagePrefix = "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), 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)
|
||
|
||
var imgPath string
|
||
if config.C.Env == "prod" {
|
||
imgPath = strings.Replace(u, devImagePrefix, "", 1)
|
||
} else {
|
||
imgPath = strings.Replace(u, prodImagePrefix, "", 1)
|
||
}
|
||
|
||
if imgPath == "/null" {
|
||
return "", nil
|
||
}
|
||
|
||
return imgPath, nil
|
||
}
|