快遞單號查詢接口-物流軌跡信息快遞鳥api對接教程

前言算法

看完快遞鳥api對接教程這篇文章,而後把源碼複製到你的項目上,就能快速完成中通快遞接口對接.更適合剛入門的菜鳥,調用快遞鳥的中通快遞查詢API接口,能查詢到中通快遞單號從收件、運輸,到轉運中心,派送到簽收等各個環節的物流發貨狀態。快遞鳥api接口不區分開發語言,支持Java,C#,PHP,Python,ObjectC等開發語言的程序調用。下面具體講解實現過程.json

目錄api

1.完成前期準備工做安全

2.API接口app

3.請求參數(Headers)ide

4.請求參數(Body)工具

5.返回參數(Return)post

6.請求完整報文(示例)測試

7.成功返回報文(示例)編碼

8.失敗返回報文(示例)

9.無軌跡返回報文(示例)

10.分步講解(C#版本)

11.順豐快遞查詢接口應用效果

12.關於簽名

13.返回碼定義

1.完成前期準備工做

1.1,去快遞鳥官網免費註冊一個帳號

1.2,免費得到一個apiKey(接口權限驗證須要), 獲取用戶ID和ApiKey

1.3,完成實名認證流程,去認證

1.4,訂購一個免費套餐,去訂購

2.API接口

2.1,測試調用地址:http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json

2.2,正式調用地址:http://api.kdniao.com/api/dist

2.3,請求方式:POST

2.4,編碼格式(utf-8):application/x-www-form-urlencoded;charset=utf-8

2.5,返回類型:JSON

2.6,調試頁面:http://kdniao.com/UserCenter/v2/SandBox/TrackQuery.aspx

2.7,調試工具:去調試(使用快遞鳥帳號登陸)

3.請求參數(Headers)

參數名稱 類型 說明 必需要求
RequestData String 請求內容需進行URL(utf-8)編碼,請求內容JSON格式,須和DataType一致 必填
EBusinessID String 用戶ID,查看用戶ID和ApiKey 必填
RequestType String 請求指令類型:1002 必填

DataSign String 簽名數據,(Body+ApiKey)進行MD5加密,再進行Base64編碼,最後進行URL(utf-8)編碼 必填
DataType String 求、返回數據類型:2-json ,默認Json 選填

4.請求參數(Body)

參數名稱 類型 說明 必需要求
OrderCode String 訂單編號 選填
ShipperCode String 快遞公司編碼,中通:ZTO 必填
LogisticCode String 物流運單號 必填

5.返回參數(Return)

參數名稱 類型 說明 必需要求
EBusinessID String 用戶ID 必填
ShipperCode String 快遞公司編碼 必填
LogisticCode String 物流運單號 選填
Success String 成功與否 必填
Reason String 失敗緣由 選填
State String 物流狀態:2-在途中,3-簽收,4-問題件 必填
Traces String 時間
AcceptTime String 必填
AcceptStation String 描述 選填
Remark String 備註 必填

6.請求完整報文(示例)

RequestData=%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27ZTO%27%2c%27LogisticCode%27%3a%2778120038107849%27%7d&EBusinessID=1617571&
RequestType=1002&DataSign=YzBmYTViYmExZmFhOGY1ZTY3MWY5OGFjYWRhNWVjNjU%3d&DataType=2

7.成功返回報文(示例)

{
"LogisticCode": "78120038107849",
"ShipperCode": "ZTO",
"Traces": [{
"AcceptStation": "【濟源市】 【濟源】(0391-6965909) 的 張霞(18839032214) 已攬收",
"AcceptTime": "2020-01-16 18:30:33"
}, {
"AcceptStation": "【濟源市】 快件離開 【濟源】 已發往 【深圳中心】",
"AcceptTime": "2020-01-16 18:36:41"
}, {
"AcceptStation": "【新鄉市】 快件已經到達 【新鄉中轉】",
"AcceptTime": "2020-01-16 22:45:49"
}, {
"AcceptStation": "【新鄉市】 快件離開 【新鄉中轉】 已發往 【深圳中心】",
"AcceptTime": "2020-01-16 22:47:48"
}, {
"AcceptStation": "【深圳市】 快件已經到達 【深圳中心】",
"AcceptTime": "2020-01-18 04:05:46"
}, {
"AcceptStation": "【深圳市】 快件離開 【深圳中心】 已發往 【深圳龍華】",
"AcceptTime": "2020-01-18 08:34:46"
}, {
"AcceptStation": "【深圳市】 快件已經到達 【深圳龍華】",
"AcceptTime": "2020-01-18 13:14:10"
}, {
"AcceptStation": "【深圳市】 【深圳龍華】 的陳智龍-王穎(13923773902) 正在第1次派件, 請保持電話暢通,並耐心等待(95720爲中通快遞員外呼專屬號碼,請放心接聽)",
"AcceptTime": "2020-01-18 16:38:35"
}, {
"AcceptStation": "【深圳市】 快件已由【豐巢的鑫茂花園A區(豐巢智能快遞櫃)】代簽收, 若有問題請電聯(13923773902 / 4000633333,18025858922), 感謝您使用中通快遞, 期待再次爲您服務!",
"AcceptTime": "2020-01-18 17:32:15"
}],
"State": "3",
"EBusinessID": "1617571",
"Success": true
}

8.失敗返回報文(示例)

{
"LogisticCode": "295734066970",
"ShipperCode": "ZTO",
"Traces": [],
"State": "0",
"EBusinessID": "1264783",
"Reason": "業務錯誤[沒有可用套餐]",
"Success": false
}

說明:未實名認證,未訂購套餐,套餐可用查詢量已經用完 都會返回此報文信息
去實名認證 / 瞭解套餐詳情

9.無軌跡返回報文(示例)

{
"LogisticCode": "295734066970",
"ShipperCode": "ZTO",
"Traces": [],
"State": "0",
"EBusinessID": "1264783",
"Reason": "暫無軌跡信息",
"Success": true
}

10.分步講解(C#版本)

10.1,請求數據包結構

在這裏插入圖片描述

10.2,C#調用代碼示例

//電商ID
string eEBusinessID = "test1617571";
 //電商加密私鑰,快遞鳥提供,注意保管,不要泄漏
string appKey= "554343b2-7252-439b-b4eb-1af42c8f2175";
 //請求url
string reqURL = "http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
//請求指令 
string reqType="1002";
//2-json 
string dataType = "2"; 
//字符編碼採用UTF-8 
string charset = "UTF-8"; 
//JSON字符串string 
string jsonStr = 
"{\"OrderCode\":\"\",\"ShipperCode\":\"SF\",\"LogisticCode\":\"118461988807\"}" ;
//把(jsonStr+APIKey)進行MD5加密
string md5Str=MD5(jsonStr + apiKey, charset);
//把md5Str 進行Base64編碼
string base64Str=base64(md5Str,charset);
//進行URL編碼 (utf-8)
string datasign = HttpUtility.UrlEncode(base64Str, charset); 
//請求報文參數 
string postStr = "RequestType=reqType&EBusinessID= eEBusinessID&RequestData=jsonStr 
&DataSign= datasign&DataType=dataType"; 
//通信協議使用Http協議Post請求方式 返回軌跡數據
string post = SendPost(reqURL, postStr);
//獲取到的post數據就是快遞鳥返回的完整報文,接下來本身寫一個解析json的方法就能獲取到裏面的字段信息。

10.3,C#調用方法

///<summary>
    /// 字符串MD5加密
    ///</summary>
    ///<param name="str">要加密的字符串</param>
    ///<param name="charset">編碼方式</param>
    ///<returns>密文</returns>
    private string MD5(string str, string charset)
    {
        byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);
        try
        {
            System.Security.Cryptography.MD5CryptoServiceProvider check;
            check = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] somme = check.ComputeHash(buffer);
            string ret = "";
            foreach (byte a in somme)
            {
                if (a < 16)
                    ret += "0" + a.ToString("X");
                else
                    ret += a.ToString("X");
            }
            return ret.ToLower();
        }
        catch
        {
            throw;
        }
    }
    /// <summary>
    /// base64編碼
    /// </summary>
    /// <param name="str">內容</param>
    /// <param name="charset">編碼方式</param>
    /// <returns></returns>
    private string base64(String str, String charset)
    {
        return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));
}
 /// <summary>
    /// Post方式提交數據,返回網頁的源代碼
    /// </summary>
    /// <param name="url">發送請求的 URL</param>
    /// <param name="postData">請求報文參數</param>
    /// <returns>遠程資源的響應結果</returns>
    private string SendPost(string url, string postData)
    {
        string result = "";
        byte[] byteData = Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Referer = url;
            request.Accept = "*/*";
            request.Timeout = 30 * 1000;
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
            request.Method = "POST";
            request.ContentLength = byteData.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(byteData, 0, byteData.Length);
            stream.Flush();
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream backStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(backStream, Encoding.GetEncoding("UTF-8"));
            result = sr.ReadToEnd();
            sr.Close();
            backStream.Close();
            response.Close();
            request.Abort();
        }
        catch (Exception ex)
        {
            result = ex.ToString();
        }
        return result;
    }

11.快遞查詢接口應用效果

快遞單號查詢接口-物流軌跡信息快遞鳥api對接教程

12.關於簽名

快遞鳥和第三方電子商務公司系統進行對接,有必定的安全機制。採用 IP 認證加簽名
的方式對接,具體方案以下:

防止數據被篡改 
在 POST 請求中會傳遞 5 個必須(R)參數 
RequestData==數據內容(URL 編碼:UTF-8) 
EBusinessID==用戶 ID 
RequestType=請求指令類型 
DataSign== 數據內容簽名:把(請求內容(未編碼)+ApiKey)進行 MD5 加密,而後 Base64 
編碼,最後進行 URL(utf-8)編碼 
DataType==2(返回數據類型爲 json) 
注:
DataSign 生成後,對方接收到數據後,以一樣的算法進行簽名(推送接口 RequestType 爲 
101/102 不須要進行 URL 編碼),生成摘要,對比二者的摘要是否相同,若是不一樣,說明傳遞過程當中發生數據篡改。 
調用接口的身份認證 
註冊成爲快遞鳥用戶後,會生成對應的用戶 ID 和 APIKey,用戶 ID 至關於用戶名, 
APIKey 至關於密碼。

13.返回碼定義

編碼 說明100 成功101 缺乏必要參數102 校驗問題103 格式問題

相關文章
相關標籤/搜索