申通快遞單號查詢接口 物流對接平臺

今天我們來聊如何利用快遞鳥提供的接口來查詢【申通快遞】的物流軌跡。

首先我們準備好需要用到的資源,

測試商戶ID:

test1617571

測試API key:


554343b2-7252-439b-b4eb-1af42c8f2175(此Key僅限測試環境使用)

API測試地址:

http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json

我以C#開發為例來講解,

如果還沒有註冊快遞鳥,或者還不知道如何獲取API Key,可以訪問這個騰訊視頻教程:


https://v.qq.com/x/page/z3068yfw0fl.html(註冊登陸獲取快遞鳥API Key)接下來,我們講解一下請求參數

接口參數,也叫業務參數,請求的業務接口不同,參數的字段,內容也不同,是跟著業務變化的,這裡我們實現的是即時查詢接口,請求指令類型:1002,快遞鳥官網要求必須傳遞快遞公司編碼和物流單號 ,圓通快遞的編碼是YTO

如要查看其他快遞公司的編碼,點擊此鏈接:

http://www.kdniao.com/documents

正如我前面的軌跡截圖,申通快遞的編碼是STO,物流單號是777007389359024

業務參數報文組合如下:

{'OrderCode':'','ShipperCode':'STO','LogisticCode':'777007389359024'}

請求的完整報文(URL編碼以後):

RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27STO%27%2c%27LogisticCode%27%3a%27777007389359024%27%7d%0d%0a++++++++&EBusinessID=1617571&RequestType=1002&DataSign=N2I4ZGEzYjkwMzhkZWY0YmM5ZGYxOGNkYjU5MmI2ZTU%3d&DataType=2

RequestData=

{'OrderCode':'','ShipperCode':'STO','LogisticCode':'777007389359024'}

&EBusinessID=1617571&RequestType=1002&DataSign=N2I4ZGEzYjkwMzhkZWY0YmM5ZGYxOGNkYjU5MmI2ZTU=&DataType=2

返回的報文信息:

<code>{
    

"LogisticCode"

:

"777007389359024"

,

"ShipperCode"

:

"STO"

,

"Traces"

: [ {

"AcceptStation"

:

"您的寶貝即將由申通快遞(江蘇省市場部三十七部)全程護航,攬件員(宏峰路)。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,希望能得到您的理解,詳情可諮詢當地網點"

,

"AcceptTime"

:

"2020-01-08 19:45:01"

}, {

"AcceptStation"

:

"快件已由【江蘇射陽公司】掃描發往【江蘇鹽城中轉部】,掃描員【孫霞】。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解"

,

"AcceptTime"

:

"2020-01-09 15:28:36"

}, {

"AcceptStation"

:

"快件已由【江蘇射陽公司】掃描發往【江蘇鹽城中轉部】,掃描員【射陽】。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解"

,

"AcceptTime"

:

"2020-01-09 17:59:53"

}, {

"AcceptStation"

:

"已到達-江蘇鹽城中轉部"

,

"AcceptTime"

:

"2020-01-09 19:57:22"

}, {

"AcceptStation"

:

"快件已由【江蘇鹽城中轉部】掃描發往【江蘇江陰航空部】,掃描員【陳建群】。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解"

,

"AcceptTime"

:

"2020-01-09 20:16:29"

}, {

"AcceptStation"

:

"已到達-江蘇江陰航空部"

,

"AcceptTime"

:

"2020-01-10 02:28:24"

}, {

"AcceptStation"

:

"快件已由【江蘇江陰航空部】掃描發往【廣東深圳轉運中心】,掃描員【張華臣】。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解"

,

"AcceptTime"

:

"2020-01-10 02:30:14"

}, {

"AcceptStation"

:

"已到達-廣東深圳轉運中心"

,

"AcceptTime"

:

"2020-01-11 00:48:28"

}, {

"AcceptStation"

:

"快件已由【廣東深圳轉運中心】掃描發往【廣東羅湖龍華橫林分部】,掃描員【深圳進港自動化中心】。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解"

,

"AcceptTime"

:

"2020-01-11 00:48:31"

}, {

"AcceptStation"

:

"快件已由【廣東深圳轉運中心】掃描發往【廣東羅湖龍華橫林分部】,掃描員【深圳進港自動化中心】。由於疫情防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解"

,

"AcceptTime"

:

"2020-01-11 00:49:01"

}, {

"AcceptStation"

:

"已到達-廣東羅湖龍華橫林分部"

,

"AcceptTime"

:

"2020-01-11 08:06:34"

}, {

"AcceptStation"

:

"已到達-廣東羅湖龍華橫林分部"

,

"AcceptTime"

:

"2020-01-11 10:33:36"

}, {

"AcceptStation"

:

"疫情無情,人有情,申通小哥一直在堅守。您的快件即將由(廣東羅湖龍華橫林分部)的派件員(王忠明)送達,為確保廣大客戶寄遞安全,減少人員直接接觸,我們建議您在取件時做好安全防護"

,

"AcceptTime"

:

"2020-01-11 11:18:36"

}, {

"AcceptStation"

:

"快遞已被【豐巢智能櫃】深圳市龍華區鑫茂花園A區2棟1單元地下車庫負1層門口豐巢快遞櫃代收,請及時取件。有問題請聯繫13925214311"

,

"AcceptTime"

:

"2020-01-11 12:55:57"

}, {

"AcceptStation"

:

"已簽收,收件人憑客戶短信取件簽收"

,

"AcceptTime"

:

"2020-01-11 22:18:09"

} ],

"State"

:

"3"

,

"EBusinessID"

:

"1617571"

,

"Success"

:

true

}/<code>
<code>C 
 
     
     
     
     
     
     
     
    

public

string

getOrderTracesByJson

(

string

url,

string

eBusinessID,

string

appKey,

string

requestData) { Dictionary<

string

,

string

> param =

new

Dictionary<

string

,

string

>(); param.Add(

"RequestData"

, HttpUtility.UrlEncode(requestData, Encoding.UTF8)); param.Add(

"EBusinessID"

, eBusinessID); param.Add(

"RequestType"

,

"1002"

);

string

dataSign = encrypt(requestData, appKey,

"UTF-8"

); param.Add(

"DataSign"

, HttpUtility.UrlEncode(dataSign, Encoding.UTF8)); param.Add(

"DataType"

,

"2"

);

string

result = sendPost(url, param);

return

result; }

private

string

sendPost

(

string

url, Dictionary<

string

,

string

> param) {

string

result =

""

; StringBuilder postData =

new

StringBuilder();

if

(param !=

null

&& param.Count >

0

) {

foreach

(

var

p

in

param) {

if

(postData.Length >

0

) { postData.Append(

"&"

); } postData.Append(p.Key); postData.Append(

"="

); postData.Append(p.Value); } }

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.Message; }

return

result; }

private

string

encrypt

(

String content, String keyValue, String charset

) {

if

(keyValue !=

null

) {

return

base64(MD5(content + keyValue, charset), charset); }

return

base64(MD5(content, charset), charset); }

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

; } }

private

string

base64

(

String str, String charset

) {

return

Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str)); }/<code>


分享到:


相關文章: