快递鸟(kdniao) 接口 API Golang实现demo

package main

import (
   "crypto/md5"
   "encoding/base64"
   "encoding/json"
   "fmt"
   "github.com/go-resty/resty"
   "net/url"
)

const (
   AppKey      = "你自己的AppKey"
   EBusinessID = "你自己的EBusinessID"
   RequestType = "1002"
   DataType    = "2"
   Url         = "http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx"
)

var body = map[string]string{"EBusinessID": EBusinessID,
   "RequestType": RequestType,
   "RequestData": "",
   "DataType":    DataType,
   "DataSign":    "",
}

type RequestData struct {
   OrderCode    string `json:"OrderCode"`
   ShipperCode  string `json:"ShipperCode"`
   LogisticCode string `json:"LogisticCode"`
}

type TracesStruct struct {
   AcceptStation string `json:"AcceptStation"`
   AcceptTime    string `json:"AcceptTime"`
}
type KdniaoReturn struct {
   LogisticCode string         `json:"LogisticCode"`
   ShipperCode  string         `json:"ShipperCode"`
   Traces       []TracesStruct `json:"Traces"`
   State        string         `json:"State"`
   //EBusinessID  string         `json:"EBusinessID"`
   Success bool `json:"Success"`
}

func generateBody() {
   
   requestData := RequestData{OrderCode: "", ShipperCode: "快递公司代码,可以上https://www.kdniao.com/file/2019%E5%BF%AB%E9%80%92%E9%B8%9F%E6%8E%A5%E5%8F%A3%E6%94%AF%E6%8C%81%E5%BF%AB%E9%80%92%E5%85%AC%E5%8F%B8%E7%BC%96%E7%A0%81.xlsx 这里下载查询", LogisticCode: "快递单号"}
   requestDataByte, err := json.Marshal(requestData)
   if err != nil {
      panic(err)
   }
   requestDataString := string(requestDataByte)
   requestDataStringEscape := url.QueryEscape(requestDataString)
   fmt.Println(requestDataStringEscape)
   md5New := md5.New()
   md5New.Write([]byte(requestDataString + AppKey))

   md5Result := fmt.Sprintf("%x", md5New.Sum(nil))
   fmt.Println(md5Result)
   sign := url.QueryEscape(base64.StdEncoding.EncodeToString([]byte(md5Result)))
   fmt.Println(sign)
   body["RequestData"] = requestDataStringEscape
   body["DataSign"] = sign
}

func main() {
   generateBody()
   client := resty.New()
   resp, err := client.R().
      SetHeader("Content-Type", "application/x-www-form-urlencoded").
      SetFormData(body).
      Post(Url)
   if err != nil {
      panic(err)
   }
   fmt.Println(resp.Status())
   result := new(KdniaoReturn)
   err = json.Unmarshal(resp.Body(), result)
   fmt.Println(err)
   //fmt.Println(string(resp.Body()))
   fmt.Printf("%+v\n", result)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值