123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package utils
- import (
- "youngmini_server/app/model/youngee_talent_model"
- "crypto/md5"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- "net/url"
- "strings"
- )
- var KD100Flags = map[string]string{
- "圆通速递": "yuantong",
- "韵达快递": "yunda",
- "申通快递": "shentong",
- "中通快递": "zhongtong",
- "顺丰速运": "shunfeng",
- "极兔": "jtexpress",
- "邮政快递包裹": "youzhengguonei",
- "EMS": "ems",
- "京东物流": "jd",
- "邮政标准快递": "youzhengbk",
- "丰网速运": "fengwang",
- "德邦快递": "debangkuaidi",
- "德邦物流": "debangwuliu",
- "丹鸟": "danniao",
- "飞豹快递": "feibaokuaidi",
- "中通快运": "zhongtongkuaiyun",
- "安能快运": "annengwuliu",
- "百世快递": "huitongkuaidi",
- "安得物流": "annto",
- "跨越速运": "kuayue",
- "特急送": "lntjs",
- "宅急送": "zhaijisong",
- "其它快递": "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)
- fmt.Println("快递 paramjson:", paramjson)
- 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 := youngee_talent_model.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
- }
- // 参数 1.快递公司 2.订单编号,都是string类型
- func GetKDDetails(com, num string) *youngee_talent_model.KdState {
- fmt.Printf("查询物流公司为 %s, 快递为编号为 %v 的快递\n", KD100Flags[com], num)
- //根据键(汉字)取出值(拼音)
- com = KD100Flags[com]
- key := "GsCwDkmq1520" //客户授权key
- customer := "F2E05F275D02E5344011B3DCD6FEB80D" //查询公司编号
- postUrl := "https://poll.kuaidi100.com/poll/query.do" //实时查询请求地址
- //使用 make 函数定义并初始化:映射(map)数据类型
- paramData := make(map[string]string)
- paramData["com"] = com //快递公司编码
- paramData["num"] = num //快递单号
- // 将一个 map[string]string 类型的变量编码为 JSON 格式
- paramDataSlice, _ := json.Marshal(paramData)
- paramjson := string(paramDataSlice)
- //构造必要参数:签名
- sign := strings.ToUpper(GetMD5Encode(paramjson + key + customer))
- // POST请求需要三个参数,分别为customer(CustomerId)和sign(签名)和param(参数)
- fmt.Println("快递 sign:", sign)
- fmt.Println("快递 paramjson:", paramjson)
- postRes, postErr := http.PostForm(postUrl, url.Values{"customer": {customer}, "sign": {sign}, "param": {paramjson}})
- if postErr != nil {
- fmt.Println("查询失败" + postErr.Error())
- return nil
- }
- postBody, err := ioutil.ReadAll(postRes.Body)
- if err != nil {
- fmt.Println("查询失败,请至快递公司官网自行查询" + err.Error())
- return nil
- }
- fmt.Printf("postBody=%+v\n", postBody)
- resp := youngee_talent_model.KdState{}
- //将json解析回到结构体
- err = json.Unmarshal(postBody, &resp)
- fmt.Printf("resp=%+v\n", resp)
- if resp.Data != nil {
- for _, v := range resp.Data {
- fmt.Printf("v=%+v\n", v)
- }
- }
- if err != nil {
- fmt.Println("json.Unmarshal error", err.Error())
- return nil
- }
- if resp.IsCheck == "1" {
- fmt.Println("查询成功,快递已签收")
- } else {
- fmt.Println("查询成功,快递尚未签收")
- }
- return &resp
- }
- // GetMD5Encode 返回一个32位md5加密后的字符串
- func GetMD5Encode(data string) string {
- h := md5.New()
- h.Write([]byte(data))
- return hex.EncodeToString(h.Sum(nil))
- }
|