package kd100 import ( "applet/app/utils" "applet/app/utils/logx" "crypto/tls" "encoding/json" "fmt" "github.com/pkg/errors" "io/ioutil" "net/http" "net/url" "strings" "time" ) type kd100 struct { key string //客户授权key customer string //查询公司编号 } const postUrl = "https://poll.kuaidi100.com/poll/query.do" func NewKd100(key, customer string) *kd100 { return &kd100{ key: key, customer: customer, } } func (kd *kd100) Query(num, comCode string) (map[string]interface{}, error) { paramData := make(map[string]string) paramData["com"] = comCode //快递公司编码 paramData["num"] = num //快递单号 str, _ := json.Marshal(paramData) paramJson := string(str) sign := kd.getSign(paramJson) // 解决 Go http请求报错x509 certificate signed by unknown authority 问题 tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{ Timeout: 15 * time.Second, Transport: tr, } postRes, postErr := client.PostForm(postUrl, url.Values{"customer": {kd.customer}, "sign": {sign}, "param": {paramJson}}) if postErr != nil { _ = logx.Error(postErr) return nil, errors.New(postErr.Error()) } postBody, err := ioutil.ReadAll(postRes.Body) if err != nil { _ = logx.Error(postErr) return nil, errors.New("查询失败,请至快递公司官网自行查询") } fmt.Println(string(postBody)) resp := make(map[string]interface{}) err = json.Unmarshal(postBody, &resp) if err != nil { _ = logx.Error(postErr) return nil, errors.New("查询失败,请至快递公司官网自行查询") } defer func() { _ = postRes.Body.Close() }() return resp, nil } func (kd *kd100) getSign(params string) string { return strings.ToUpper(utils.Md5(params + kd.key + kd.customer)) }