kuaidi100.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package utils
  2. import (
  3. "youngmini_server/app/model/youngee_talent_model"
  4. "crypto/md5"
  5. "encoding/hex"
  6. "encoding/json"
  7. "fmt"
  8. "io/ioutil"
  9. "net/http"
  10. "net/url"
  11. "strings"
  12. )
  13. var KD100Flags = map[string]string{
  14. "圆通速递": "yuantong",
  15. "韵达快递": "yunda",
  16. "申通快递": "shentong",
  17. "中通快递": "zhongtong",
  18. "顺丰速运": "shunfeng",
  19. "极兔": "jtexpress",
  20. "邮政快递包裹": "youzhengguonei",
  21. "EMS": "ems",
  22. "京东物流": "jd",
  23. "邮政标准快递": "youzhengbk",
  24. "丰网速运": "fengwang",
  25. "德邦快递": "debangkuaidi",
  26. "德邦物流": "debangwuliu",
  27. "丹鸟": "danniao",
  28. "飞豹快递": "feibaokuaidi",
  29. "中通快运": "zhongtongkuaiyun",
  30. "安能快运": "annengwuliu",
  31. "百世快递": "huitongkuaidi",
  32. "安得物流": "annto",
  33. "跨越速运": "kuayue",
  34. "特急送": "lntjs",
  35. "宅急送": "zhaijisong",
  36. "其它快递": "other",
  37. }
  38. // GetKDStatus 获取快递跟踪信息
  39. func GetKDStatus(com, num string) string {
  40. fmt.Printf("查询物流公司为 %s, 快递为编号为 %v 的快递\n", KD100Flags[com], num)
  41. key := "GsCwDkmq1520" //客户授权key
  42. customer := "F2E05F275D02E5344011B3DCD6FEB80D" //查询公司编号
  43. postUrl := "https://poll.kuaidi100.com/poll/query.do" //实时查询请求地址
  44. paramData := make(map[string]string)
  45. paramData["com"] = com //快递公司编码
  46. paramData["num"] = num //快递单号
  47. paramDataSlice, _ := json.Marshal(paramData)
  48. paramjson := string(paramDataSlice)
  49. sign := strings.ToUpper(GetMD5Encode(paramjson + key + customer))
  50. // POST请求需要三个参数,分别为customer(CustomerId)和sign(签名)和param(参数)
  51. fmt.Println("快递 sign:", sign)
  52. fmt.Println("快递 paramjson:", paramjson)
  53. postRes, postErr := http.PostForm(postUrl, url.Values{"customer": {customer}, "sign": {sign}, "param": {paramjson}})
  54. if postErr != nil {
  55. fmt.Println("查询失败" + postErr.Error())
  56. return "查询失败"
  57. }
  58. postBody, err := ioutil.ReadAll(postRes.Body)
  59. if err != nil {
  60. fmt.Println("查询失败,请至快递公司官网自行查询" + err.Error())
  61. return "查询失败,请至快递公司官网自行查询"
  62. }
  63. resp := youngee_talent_model.KdState{}
  64. err = json.Unmarshal(postBody, &resp)
  65. if err != nil {
  66. fmt.Println("json.Unmarshal error", err.Error())
  67. return "查询失败"
  68. }
  69. if resp.IsCheck == "1" {
  70. fmt.Println("查询成功,快递已签收")
  71. } else {
  72. fmt.Println("查询成功,快递尚未签收")
  73. }
  74. return resp.IsCheck
  75. }
  76. func GetKDDetails(com, num string) *youngee_talent_model.KdState {
  77. fmt.Printf("查询物流公司为 %s, 快递为编号为 %v 的快递\n", KD100Flags[com], num)
  78. com = KD100Flags[com]
  79. key := "GsCwDkmq1520" //客户授权key
  80. customer := "F2E05F275D02E5344011B3DCD6FEB80D" //查询公司编号
  81. postUrl := "https://poll.kuaidi100.com/poll/query.do" //实时查询请求地址
  82. paramData := make(map[string]string)
  83. paramData["com"] = com //快递公司编码
  84. paramData["num"] = num //快递单号
  85. paramDataSlice, _ := json.Marshal(paramData)
  86. paramjson := string(paramDataSlice)
  87. sign := strings.ToUpper(GetMD5Encode(paramjson + key + customer))
  88. // POST请求需要三个参数,分别为customer(CustomerId)和sign(签名)和param(参数)
  89. fmt.Println("快递 sign:", sign)
  90. fmt.Println("快递 paramjson:", paramjson)
  91. postRes, postErr := http.PostForm(postUrl, url.Values{"customer": {customer}, "sign": {sign}, "param": {paramjson}})
  92. if postErr != nil {
  93. fmt.Println("查询失败" + postErr.Error())
  94. return nil
  95. }
  96. postBody, err := ioutil.ReadAll(postRes.Body)
  97. if err != nil {
  98. fmt.Println("查询失败,请至快递公司官网自行查询" + err.Error())
  99. return nil
  100. }
  101. fmt.Printf("postBody=%+v\n", postBody)
  102. resp := youngee_talent_model.KdState{}
  103. err = json.Unmarshal(postBody, &resp)
  104. fmt.Printf("resp=%+v\n", resp)
  105. if resp.Data != nil {
  106. for _, v := range resp.Data {
  107. fmt.Printf("v=%+v\n", v)
  108. }
  109. }
  110. if err != nil {
  111. fmt.Println("json.Unmarshal error", err.Error())
  112. return nil
  113. }
  114. if resp.IsCheck == "1" {
  115. fmt.Println("查询成功,快递已签收")
  116. } else {
  117. fmt.Println("查询成功,快递尚未签收")
  118. }
  119. return &resp
  120. }
  121. // GetMD5Encode 返回一个32位md5加密后的字符串
  122. func GetMD5Encode(data string) string {
  123. h := md5.New()
  124. h.Write([]byte(data))
  125. return hex.EncodeToString(h.Sum(nil))
  126. }