123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package service
- import (
- "crypto/md5"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "strings"
- )
- type KdState struct {
- Message string `json:"message"`
- State string `json:"state"`
- Status string `json:"status"`
- IsCheck string `json:"ischeck"`
- }
- var KD100Flags = map[string]string{
- "ane66": "安能快递",
- "debangwuliu": "德邦物流",
- "debangkuaidi": "德邦快递",
- "ems": "EMS",
- "guotongkuaidi": "国通快递",
- "huitongkuaidi": "百世快递",
- "jd": "京东物流",
- "kuayue": "跨越速运",
- "pjbest": "品骏快递",
- "shentong": "申通快递",
- "shunfeng": "顺丰速运",
- "suer": "速尔快递",
- "xinfengwuliu": "信丰物流",
- "youshuwuliu": "优速物流",
- "youzhengguonei": "邮政快递包裹",
- "yuantong": "圆通速递",
- "yuantongguoji": "圆通国际",
- "yunda": "韵达快递",
- "zhaijisong": "宅急送",
- "zhongtong": "中通快递",
- "ewe": "EWE全球快递",
- "quanyikuaidi": "全一快递",
- "tiantian": "天天快递",
- "sxjdfreight": "顺心捷达",
- "dhl": "DHL-中国件",
- "tnt": "TNT",
- "other": "其它快递",
- }
- // GetKDStatus 获取快递跟踪信息
- func GetKDStatus(com, num string) string {
- fmt.Printf("查询物流公司为 %s, 快递为编号为 %v 的快递\n", KD100Flags[com], num)
- key := "GsCwDkmq1520" //客户授权key
- customer := "F2E05F275D02E5344011B3DCD6FEB80D" //查询公司编号
- postUrl := "https://poll.kuaidi100.com/poll/query.do" //实时查询请求地址
- paramData := make(map[string]string)
- paramData["com"] = com //快递公司编码
- paramData["num"] = num //快递单号
- paramDataSlice, _ := json.Marshal(paramData)
- paramjson := string(paramDataSlice)
- sign := strings.ToUpper(GetMD5Encode(paramjson + key + customer))
- // POST请求需要三个参数,分别为customer(CustomerId)和sign(签名)和param(参数)
- fmt.Println("快递 sign:", sign)
- postRes, postErr := http.PostForm(postUrl, url.Values{"customer": {customer}, "sign": {sign}, "param": {paramjson}})
- if postErr != nil {
- fmt.Println("查询失败" + postErr.Error())
- return "查询失败"
- }
- postBody, err := ioutil.ReadAll(postRes.Body)
- if err != nil {
- fmt.Println("查询失败,请至快递公司官网自行查询" + err.Error())
- return "查询失败,请至快递公司官网自行查询"
- }
- resp := KdState{}
- err = json.Unmarshal(postBody, &resp)
- if err != nil {
- fmt.Println("json.Unmarshal error", err.Error())
- return "查询失败"
- }
- if resp.IsCheck == "1" {
- fmt.Println("查询成功,快递已签收")
- } else {
- fmt.Println("查询成功,快递尚未签收")
- }
- return resp.IsCheck
- }
- // GetMD5Encode 返回一个32位md5加密后的字符串
- func GetMD5Encode(data string) string {
- h := md5.New()
- h.Write([]byte(data))
- return hex.EncodeToString(h.Sum(nil))
- }
|