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)
}
快递鸟(kdniao) 接口 API Golang实现demo
最新推荐文章于 2023-08-03 17:50:10 发布