package tencent import ( . "code.hoteas.com/golang/hotime/common" "crypto/hmac" "crypto/sha1" "encoding/base64" "fmt" "io" "io/ioutil" "net/http" gourl "net/url" "strings" "time" ) type company struct { secretId string secretKey string } var Company = company{} func (that *company) Init(secretId, secretKey string) { // 云市场分配的密钥Id //secretId := "xxxx" //// 云市场分配的密钥Key //secretKey := "xxxx" that.secretId = secretId that.secretKey = secretKey } func (that *company) calcAuthorization(source string) (auth string, datetime string, err error) { timeLocation, _ := time.LoadLocation("Etc/GMT") datetime = time.Now().In(timeLocation).Format("Mon, 02 Jan 2006 15:04:05 GMT") signStr := fmt.Sprintf("x-date: %s\nx-source: %s", datetime, source) // hmac-sha1 mac := hmac.New(sha1.New, []byte(that.secretKey)) mac.Write([]byte(signStr)) sign := base64.StdEncoding.EncodeToString(mac.Sum(nil)) auth = fmt.Sprintf("hmac id=\"%s\", algorithm=\"hmac-sha1\", headers=\"x-date x-source\", signature=\"%s\"", that.secretId, sign) return auth, datetime, nil } func (that *company) urlencode(params map[string]string) string { var p = gourl.Values{} for k, v := range params { p.Add(k, v) } return p.Encode() } func (that *company) GetCompany(name string) Map { // 云市场分配的密钥Id //secretId := "xxxx" //// 云市场分配的密钥Key //secretKey := "xxxx" source := "market" // 签名 auth, datetime, _ := that.calcAuthorization(source) // 请求方法 method := "GET" // 请求头 headers := map[string]string{"X-Source": source, "X-Date": datetime, "Authorization": auth} // 查询参数 queryParams := make(map[string]string) queryParams["keyword"] = name // body参数 bodyParams := make(map[string]string) // url参数拼接 url := "https://service-3jnh3ku8-1256140209.gz.apigw.tencentcs.com/release/business4/geet" if len(queryParams) > 0 { url = fmt.Sprintf("%s?%s", url, that.urlencode(queryParams)) } bodyMethods := map[string]bool{"POST": true, "PUT": true, "PATCH": true} var body io.Reader = nil if bodyMethods[method] { body = strings.NewReader(that.urlencode(bodyParams)) headers["Content-Type"] = "application/x-www-form-urlencoded" } client := &http.Client{ Timeout: 5 * time.Second, } request, err := http.NewRequest(method, url, body) if err != nil { fmt.Println(err) return nil } for k, v := range headers { request.Header.Set(k, v) } response, err := client.Do(request) if err != nil { fmt.Println(err) return nil } defer response.Body.Close() bodyBytes, err := ioutil.ReadAll(response.Body) if err != nil { fmt.Println(err) return nil } res := string(bodyBytes) fmt.Println(res) return ObjToMap(res) }