package face_check import ( zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils" "crypto/hmac" "crypto/sha256" "encoding/base64" "errors" "fmt" "sort" "time" ) func Send(url string, appKey, appSecret string, arg, HeaderArr map[string]string) (string, error) { sign := Sign(url, arg, "POST", appKey, appSecret, HeaderArr) HeaderArr["X-Ca-Signature"] = sign domain := "https://zfah.market.alicloudapi.com" post, err := zhios_third_party_utils.CurlPost(domain+url, arg, HeaderArr) if err != nil { return "", err } if post == nil { return "", errors.New("获取数据失败") } fmt.Println(post) fmt.Println(err) return string(post), nil } func Sign(url string, arg map[string]string, HTTPMethod, appKey, appSecret string, header map[string]string) string { headerStr := make([]string, 0) for k := range header { headerStr = append(headerStr, k) } sort.Strings(headerStr) str := HTTPMethod + "\n" str += header["Accept"] + "\n" str += header["Content-MD5"] + "\n" str += header["Content-Type"] + "\n" str += header["Date"] + "\n" var filter = []string{"X-Ca-Signature", "X-Ca-Signature-Headers", "Accept", "Content-MD5", "Content-Type", "Date"} for _, v := range headerStr { if zhios_third_party_utils.InArr(v, filter) { continue } str += v + ":" + header[v] + "\n" } pathStr := "" argStr := make([]string, 0) for k := range arg { argStr = append(argStr, k) } sort.Strings(argStr) for _, v := range argStr { if pathStr == "" { pathStr += "?" + v + "=" + arg[v] } else { pathStr += "&" + v + "=" + arg[v] } } str += url + pathStr fmt.Println(str) hmacSHA256 := GenHmacSha256(str, appSecret) fmt.Println(hmacSHA256) return hmacSHA256 } func GenHmacSha256(message string, secret string) string { h := hmac.New(sha256.New, []byte(secret)) h.Write([]byte(message)) //sha := hex.EncodeToString(h.Sum(nil)) //fmt.Printf("sha:%s\n", sha) return Base64UrlSafeEncode(h.Sum(nil)) } func Base64UrlSafeEncode(source []byte) string { byteArr := base64.StdEncoding.EncodeToString(source) return byteArr } func Header(appKey string) map[string]string { headers := map[string]string{ "Accept": "application/json; charset=utf-8", "X-Ca-Key": appKey, "X-Ca-Nonce": zhios_third_party_utils.RandNum(), "X-Ca-Signature-Method": "HmacSHA256", "X-Ca-Timestamp": zhios_third_party_utils.Int64ToStr(time.Now().Unix() * 1000), "X-Ca-Signature-Headers": "X-Ca-Key,X-Ca-Nonce,X-Ca-Signature-Method,X-Ca-Timestamp", } return headers }