router.GET("/kd100/auto_com_num", controller.AutoComNum)
router.GET("/kd100/query_num_detail", controller.QueryNumDetail)
func AutoComNum(ctx *gin.Context) {
text := ctx.Query("num")
url := "https://www.kuaidi100.com/autonumber/autoComNum?resultv2=1&text=" + text
paramData := gin.H{}
headerData := make(map[string]string, 1)
headerData["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0"
resp := SendPostWithHeard(url, paramData, headerData)
type resAuto struct {
ComCode string `json:"comCode"`
LengthPre int `json:"lengthPre"`
NoCount int `json:"noCount"`
NoPre string `json:"noPre"`
Name string `json:"name"`
}
type respData struct {
Num string `json:"num"`
ComCode string `json:"comCode"`
Auto []*resAuto `json:"auto"`
}
var resdata *respData
if err := json.Unmarshal([]byte(resp), &resdata); err != nil {
fmt.Println("Unmarshal resdata fail,", err)
httpext.Error(ctx, e.ERROR)
return
}
for _, v := range resdata.Auto {
kdName, ok := KD100Flags[v.ComCode]
if ok {
v.Name = kdName
} else {
v.Name = "未知快递"
}
}
httpext.SuccessExt(ctx, resdata)
}
func QueryNumDetail(ctx *gin.Context) {
num := ctx.Query("num")
kdtype := ctx.Query("comCode")
key := "XXXXXXXX"
customer := "XXXXXXXXXXXXXXXXXXXXXXX"
posturl := "http://poll.kuaidi100.com/poll/query.do"
paramData := make(map[string]string)
paramData["com"] = kdtype
paramData["num"] = num
paramDataSlice, _ := json.Marshal(paramData)
paramjson := string(paramDataSlice)
sign := strings.ToUpper(crypto.GetMd5String(paramjson + key + customer))
fmt.Println("p=====>", customer)
postRes, postErr := http.PostForm(posturl, url.Values{"customer": {customer}, "sign": {sign}, "param": {paramjson}})
if postErr != nil {
fmt.Println("查询失败" + postErr.Error())
httpext.ErrorExt(ctx, e.ERROR, "查询失败"+postErr.Error())
return
}
postBody, err := ioutil.ReadAll(postRes.Body)
if err != nil {
fmt.Println("查询失败,请至快递公司官网自行查询" + err.Error())
httpext.ErrorExt(ctx, e.ERROR, "查询失败,请至快递公司官网自行查询"+err.Error())
return
}
fmt.Println(string(postBody))
resp := make(map[string]interface{})
err = json.Unmarshal(postBody, &resp)
if err != nil {
fmt.Println("json.Unmarshal error", err.Error())
httpext.ErrorExt(ctx, e.ERROR, "查询失败,请至快递公司官网自行查询"+err.Error())
return
}
httpext.SuccessExt(ctx, resp)
}
func SendPostWithHeard(url string, data interface{}, hearderParam map[string]string) string {
bytesData, err := json.Marshal(data)
if err != nil {
fmt.Println(err.Error())
return err.Error()
}
reader := bytes.NewReader(bytesData)
request, err := http.NewRequest("POST", url, reader)
if err != nil {
fmt.Println(err.Error())
return err.Error()
}
if len(hearderParam) > 0 {
for k, v := range hearderParam {
request.Header.Set(k, v)
}
}
client := http.Client{}
resp, err := client.Do(request)
if err != nil {
fmt.Println(err.Error())
return err.Error()
}
respBytes, err := ioutil.ReadAll(resp.Body)
fmt.Println(1111111)
fmt.Println(respBytes)
if err != nil {
fmt.Println(err.Error())
return err.Error()
}
return string(respBytes)
}