diff --git a/meituan_cps/api.go b/meituan_cps/api.go new file mode 100644 index 0000000..a39fbbc --- /dev/null +++ b/meituan_cps/api.go @@ -0,0 +1,60 @@ +package meituan_cps + +import ( + "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/comm" + zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils" + "crypto/hmac" + "crypto/md5" + "crypto/sha256" + "encoding/base64" + "fmt" + "strings" + "time" +) + +func Send(method, key, secret string, param map[string]interface{}) { + header := map[string]string{ + "S-Ca-App": key, + "S-Ca-Timestamp": zhios_third_party_utils.Int64ToStr(time.Now().Unix() * 1000), + } + url := "https://media.meituan.com/cps_open/common/api/v1/" + paramStr := comm.GetSortJson(param) + paramStr = strings.ReplaceAll(paramStr, "\n", "") + header = GetSign(method, secret, paramStr, header) + fmt.Println(header) + fmt.Println(paramStr) + + post, err := zhios_third_party_utils.CurlPost(url+method, paramStr, header) + fmt.Println(string(post)) + fmt.Println(err) +} + +func GetSign(method, secret string, paramStr string, header map[string]string) map[string]string { + headers := comm.KsortToStr(header) + + HTTPMethod := "POST" + h1 := md5.New() + h1.Write([]byte(paramStr)) + ContentMd5 := base64.StdEncoding.EncodeToString(h1.Sum(nil)) + fmt.Println(ContentMd5) + headerStr := "" + signHeader := "" + for _, v := range headers { + headerStr += v + ":" + header[v] + "\n" + if signHeader == "" { + signHeader += v + } else { + signHeader += "," + v + } + } + + Url := "/cps_open/common/api/v1/" + method + sign := HTTPMethod + "\n" + ContentMd5 + "\n" + headerStr + Url + h := hmac.New(sha256.New, []byte(secret)) + _, _ = h.Write([]byte(sign)) + header["S-Ca-Signature"] = base64.StdEncoding.EncodeToString(h.Sum(nil)) + header["Content-MD5"] = ContentMd5 + header["S-Ca-Signature-Headers"] = signHeader + header["Content-Type"] = "application/json; charset=utf-8" + return header +}