快遞物流查詢接口介紹


快遞查詢接口API    

    快遞查詢接口是指快遞查詢網對外開放的應用程序接口,開發人員能夠通過調用該接口與快遞查詢網進行交互,並基於該接口開發自己的快遞查詢應用程序。目前比較常用的接口有快遞鳥、快遞100、快遞網等。

 

應用場景

 

        電商網站用戶打開“我的訂單”時調用此API顯示物流信息詳情;或者是電商管理后台的物流系統,客服在對賬前查詢所有運單的簽收狀態,並追蹤問題。

 

快遞查詢接口分類

        物流軌跡查詢接口有即時查詢和訂閱查詢兩種,即時是請求即返回數據,訂閱則是訂閱快遞單號到接口,有物流軌跡更新則全量返回數據。

 

        快遞鳥即時接口可以查詢3000次,3000以上接訂閱接口,統一接口模式接入,常用快遞均支持查詢,還有訂閱接口、在線下單接口、電子面單接口,接口均不收取費用,        沒有要求用戶添加外鏈,支持418家國內外快遞物流查詢。

        快遞100每天可以免費查詢2000次,超過2000次收費,每次0.06~0.1元不等,如果查詢的量大的話可以降低費用,免費的接口有幾家常用快遞不支持接口模式,只支持   htmlAPI,要求用戶添加外鏈,支持300多家國內外快遞物流查詢。

        快遞網每天可以免費查詢500次,超過500次收費,每次0.05元,只有即時查詢和訂閱推送接口,要求用戶添加外鏈,支持395家國內外快遞物流查詢。

 

對接說明

         不同公司的快遞查詢接口接入類似,都需要注冊http://www.kdniao.com/ServiceApply.aspx ,申請賬號獲取KEY和ID,如果是訂閱接口需要技術聯調。以快遞鳥及時查詢接口接入為例。

      根據快遞單號和快遞公司編碼查詢物流軌跡信息。接口需要指定快遞單號的快遞公司編碼,格式不對或則編碼錯誤都會返失敗的信息。如:EMS物流單號應選擇快遞公司編碼(EMS)查看快遞公司編碼返回的物流跟蹤信息按照發生的時間升序排列。

        接口支持的消息接收方式為HTTP POST

        請求方法的編碼格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"

        API地址:http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx

 

 

請求系統級參數

參數名稱 類型 說明 必須要求
RequestData String 請求內容需進行URL(utf-8)編碼。請求內容JSON或XML格式,須和DataType一致。 R
EBusinessID String 商戶ID,請在我的服務頁面查看。 R
RequestType String 請求指令類型:1002 R
DataSign String 數據內容簽名:把(請求內容(未編碼)+AppKey)進行MD5加密,然后Base64編碼,最后進行URL(utf-8)編碼。詳細過程請查看Demo。 R
DataType String 請求、返回數據類型:1-xml,2-json;默認為xml格式 O

 

 

請求內容字段定義

 

參數 類型 說明 必須要求
OrderCode String 訂單編號 O
ShipperCode String 快遞公司編碼 R
LogisticCode String 物流單號 R

 

 

返回參數定義

參數名稱 類型 說明 必須要求
EBusinessID String 用戶ID R
OrderCode String 訂單編號 O
ShipperCode String 快遞公司編碼 R
LogisticCode String 物流運單號 R
Success Bool 成功與否 R
Reason String 失敗原因 O
State String 物流狀態:2-在途中,3-簽收,4-問題件 R
Traces
Trace AcceptTime String 時間 R
AcceptStation String 描述 R
Remark String 備注 O

 

 

Java調用示例

 

[java]  view plain  copy
 
    1. import java.io.BufferedReader;  
    2. import java.io.IOException;  
    3. import java.io.InputStreamReader;  
    4. import   
    5.   
    6. java.io.OutputStreamWriter;  
    7. import   
    8.   
    9. java.io.UnsupportedEncodingExcept  
    10.   
    11. ion;  
    12. import   
    13.   
    14. java.net.HttpURLConnection;  
    15. import java.net.URL;  
    16. import java.net.URLEncoder;  
    17. import   
    18.   
    19. java.security.MessageDigest;  
    20. import java.util.HashMap;  
    21. import java.util.Map;   
    22.   
    23. /** 
    24.  * 
    25.  * 快遞鳥物流軌跡即時查詢接口 
    26.  * 
    27.  * @技術QQ群: 456320272 
    28.  * @see:  
    29.  
    30. http://www.kdniao.com/YundanChaxu 
    31.  
    32. nAPI.aspx 
    33.  * @copyright: 深圳市快金數據技術 
    34.  
    35. 服務有限公司 
    36.  * 
    37.  * DEMO中的電商ID與私鑰僅限測試使 
    38.  
    39. 用,正式環境請單獨注冊賬號 
    40.  * 單日超過500單查詢量,建議接入 
    41.  
    42. 我方物流軌跡訂閱推送接口 
    43.  *  
    44.  * ID和Key請到官網申請: 
    45.  
    46. http://www.kdniao.com/ServiceAppl 
    47.  
    48. y.aspx 
    49.  */  
    50.   
    51. public class KdniaoTrackQueryAPI   
    52.   
    53. {  
    54.       
    55.     //DEMO  
    56.     public static void main  
    57.   
    58. (String[] args) {  
    59.           
    60.   
    61. KdniaoTrackQueryAPI api = new   
    62.   
    63. KdniaoTrackQueryAPI();  
    64.         try {  
    65.             String   
    66.   
    67. result =   
    68.   
    69. api.getOrderTracesByJson("ANE",   
    70.   
    71. "210001633605");  
    72.               
    73.   
    74. System.out.print(result);  
    75.               
    76.         } catch   
    77.   
    78. (Exception e) {  
    79.               
    80.   
    81. e.printStackTrace();  
    82.         }  
    83.     }  
    84.       
    85.     //電商ID  
    86.     private String   
    87.   
    88. EBusinessID="請到快遞鳥官網申請  
    89.   
    90. http://www.kdniao.com/ServiceAppl  
    91.   
    92. y.aspx";  
    93.     //電商加密私鑰,快遞鳥提  
    94.   
    95. 供,注意保管,不要泄漏  
    96.     private String AppKey="請  
    97.   
    98. 到快遞鳥官網申請  
    99.   
    100. http://www.kdniao.com/ServiceAppl  
    101.   
    102. y.aspx";  
    103.     //請求url  
    104.     private String   
    105.   
    106. ReqURL="http://api.kdniao.cc/Ebus  
    107.   
    108. iness/EbusinessOrderHandle.aspx";     
    109.    
    110.     /** 
    111.      * Json方式 查詢訂單物流軌跡 
    112.      * @throws Exception  
    113.      */  
    114.     public String   
    115.   
    116. getOrderTracesByJson(String   
    117.   
    118. expCode, String expNo) throws   
    119.   
    120. Exception{  
    121.         String   
    122.   
    123. requestData=   
    124.   
    125. "{'OrderCode':'','ShipperCode':'"   
    126.   
    127. + expCode + "','LogisticCode':'"   
    128.   
    129. + expNo + "'}";  
    130.           
    131.         Map<String,   
    132.   
    133. String> params = new   
    134.   
    135. HashMap<String, String>();  
    136.         params.put  
    137.   
    138. ("RequestData", urlEncoder  
    139.   
    140. (requestData, "UTF-8"));  
    141.         params.put  
    142.   
    143. ("EBusinessID", EBusinessID);  
    144.         params.put  
    145.   
    146. ("RequestType", "1002");  
    147.         String   
    148.   
    149. dataSign=encrypt(requestData,   
    150.   
    151. AppKey, "UTF-8");  
    152.         params.put  
    153.   
    154. ("DataSign", urlEncoder(dataSign,   
    155.   
    156. "UTF-8"));  
    157.         params.put  
    158.   
    159. ("DataType", "2");  
    160.           
    161.         String   
    162.   
    163. result=sendPost(ReqURL, params);      
    164.           
    165.         //根據公司業務處  
    166.   
    167. 理返回的信息......  
    168.           
    169.         return result;  
    170.     }  
    171.       
    172.     /** 
    173.      * XML方式 查詢訂單物流軌跡 
    174.      * @throws Exception  
    175.      */  
    176.     public String   
    177.   
    178. getOrderTracesByXml() throws   
    179.   
    180. Exception{  
    181.         String   
    182.   
    183. requestData= "<?xml version=  
    184.   
    185. \"1.0\" encoding=\"utf-8\" ?>"+  
    186.                       
    187.   
    188.         "<Content>"+  
    189.                       
    190.   
    191.           
    192.   
    193. "<OrderCode></OrderCode>"+  
    194.                       
    195.   
    196.           
    197.   
    198. "<ShipperCode>SF</ShipperCode>"+  
    199.                       
    200.   
    201.           
    202.   
    203. "<LogisticCode>589707398027</Logi  
    204.   
    205. sticCode>"+  
    206.                       
    207.   
    208.         "</Content>";  
    209.           
    210.         Map<String,   
    211.   
    212. String> params = new   
    213.   
    214. HashMap<String, String>();  
    215.         params.put  
    216.   
    217. ("RequestData", urlEncoder  
    218.   
    219. (requestData, "UTF-8"));  
    220.         params.put  
    221.   
    222. ("EBusinessID", EBusinessID);  
    223.         params.put  
    224.   
    225. ("RequestType", "1002");  
    226.         String   
    227.   
    228. dataSign=encrypt(requestData,   
    229.   
    230. AppKey, "UTF-8");  
    231.         params.put  
    232.   
    233. ("DataSign", urlEncoder(dataSign,   
    234.   
    235. "UTF-8"));  
    236.         params.put  
    237.   
    238. ("DataType", "1");  
    239.           
    240.         String   
    241.   
    242. result=sendPost(ReqURL, params);      
    243.           
    244.         //根據公司業務處  
    245.   
    246. 理返回的信息......  
    247.           
    248.         return result;  
    249.     }  
    250.    
    251.     /** 
    252.      * MD5加密 
    253.      * @param str 內容        
    254.      * @param charset 編碼方式 
    255.      * @throws Exception  
    256.      */  
    257.     @SuppressWarnings  
    258.   
    259. ("unused")  
    260.     private String MD5(String   
    261.   
    262. str, String charset) throws   
    263.   
    264. Exception {  
    265.         MessageDigest md =   
    266.   
    267. MessageDigest.getInstance("MD5");  
    268.         md.update  
    269.   
    270. (str.getBytes(charset));  
    271.         byte[] result =   
    272.   
    273. md.digest();  
    274.         StringBuffer sb = new   
    275.   
    276. StringBuffer(32);  
    277.         for (int i = 0; i <   
    278.   
    279. result.length; i++) {  
    280.             int val = result  
    281.   
    282. [i] & 0xff;  
    283.             if (val <= 0xf) {  
    284.                 sb.append  
    285.   
    286. ("0");  
    287.             }  
    288.             sb.append  
    289.   
    290. (Integer.toHexString(val));  
    291.         }  
    292.         return sb.toString  
    293.   
    294. ().toLowerCase();  
    295.     }  
    296.       
    297.     /** 
    298.      * base64編碼 
    299.      * @param str 內容        
    300.      * @param charset 編碼方式 
    301.      * @throws  
    302.  
    303. UnsupportedEncodingException  
    304.      */  
    305.     private String base64  
    306.   
    307. (String str, String charset)   
    308.   
    309. throws   
    310.   
    311. UnsupportedEncodingException{  
    312.         String encoded =   
    313.   
    314. base64Encode(str.getBytes  
    315.   
    316. (charset));  
    317.         return encoded;     
    318.   
    319.    
    320.     }     
    321.       
    322.     @SuppressWarnings  
    323.   
    324. ("unused")  
    325.     private String   
    326.   
    327. urlEncoder(String str, String   
    328.   
    329. charset) throws   
    330.   
    331. UnsupportedEncodingException{  
    332.         String result =   
    333.   
    334. URLEncoder.encode(str, charset);  
    335.         return result;  
    336.     }  
    337.       
    338.     /** 
    339.      * 電商Sign簽名生成 
    340.      * @param content 內容    
    341.      * @param keyValue Appkey   
    342.      * @param charset 編碼方式 
    343.      * @throws  
    344.  
    345. UnsupportedEncodingException  
    346.  
    347. ,Exception 
    348.      * @return DataSign簽名 
    349.      */  
    350.     @SuppressWarnings  
    351.   
    352. ("unused")  
    353.     private String encrypt   
    354.   
    355. (String content, String keyValue,   
    356.   
    357. String charset) throws   
    358.   
    359. UnsupportedEncodingException,   
    360.   
    361. Exception  
    362.     {  
    363.         if (keyValue !=   
    364.   
    365. null)  
    366.         {  
    367.             return   
    368.   
    369. base64(MD5(content + keyValue,   
    370.   
    371. charset), charset);  
    372.         }  
    373.         return base64  
    374.   
    375. (MD5(content, charset), charset);  
    376.     }  
    377.       
    378.      /** 
    379.      * 向指定 URL 發送POST方法的 
    380.  
    381. 請求      
    382.      * @param url 發送請求的 URL   
    383.  
    384.    
    385.      * @param params 請求的參數集 
    386.  
    387. 合      
    388.      * @return 遠程資源的響應結果 
    389.      */  
    390.     @SuppressWarnings  
    391.   
    392. ("unused")  
    393.     private String sendPost  
    394.   
    395. (String url, Map<String, String>   
    396.   
    397. params) {  
    398.         OutputStreamWriter out =   
    399.   
    400. null;  
    401.         BufferedReader in = null;   
    402.   
    403.          
    404.         StringBuilder result =   
    405.   
    406. new StringBuilder();   
    407.         try {  
    408.             URL realUrl = new   
    409.   
    410. URL(url);  
    411.             HttpURLConnection   
    412.   
    413. conn =(HttpURLConnection)   
    414.   
    415. realUrl.openConnection();  
    416.             // 發送POST請求必須設  
    417.   
    418. 置如下兩行  
    419.             conn.setDoOutput  
    420.   
    421. (true);  
    422.             conn.setDoInput  
    423.   
    424. (true);  
    425.             // POST方法  
    426.               
    427.   
    428. conn.setRequestMethod("POST");  
    429.             // 設置通用的請求屬性  
    430.               
    431.   
    432. conn.setRequestProperty("accept",   
    433.   
    434. "*/*");  
    435.               
    436.   
    437. conn.setRequestProperty  
    438.   
    439. ("connection", "Keep-Alive");  
    440.               
    441.   
    442. conn.setRequestProperty("user-  
    443.   
    444. agent",  
    445.                     "Mozilla/4.0   
    446.   
    447. (compatible; MSIE 6.0; Windows NT   
    448.   
    449. 5.1;SV1)");  
    450.               
    451.   
    452. conn.setRequestProperty  
    453.   
    454. ("Content-Type", "application/x-  
    455.   
    456. www-form-urlencoded");  
    457.             conn.connect();  
    458.             // 獲取URLConnection  
    459.   
    460. 對象對應的輸出流  
    461.             out = new   
    462.   
    463. OutputStreamWriter  
    464.   
    465. (conn.getOutputStream(), "UTF-  
    466.   
    467. 8");  
    468.             // 發送請求參數         
    469.   
    470.        
    471.             if (params != null) {  
    472.                     
    473.   
    474. StringBuilder param = new   
    475.   
    476. StringBuilder();   
    477.                   for   
    478.   
    479. (Map.Entry<String, String> entry   
    480.   
    481. : params.entrySet()) {  
    482.                         
    483.   
    484. if(param.length()>0){  
    485.                           
    486.   
    487.   param.append("&");  
    488.                         
    489.   
    490. }                   
    491.                         
    492.   
    493. param.append(entry.getKey());  
    494.                         
    495.   
    496. param.append("=");  
    497.                         
    498.   
    499. param.append(entry.getValue());       
    500.   
    501.                 
    502.                         
    503.   
    504. //System.out.println  
    505.   
    506. (entry.getKey  
    507.   
    508. ()+":"+entry.getValue());  
    509.                   }  
    510.                     
    511.   
    512. //System.out.println  
    513.   
    514. ("param:"+param.toString());  
    515.                     
    516.   
    517. out.write(param.toString());  
    518.             }  
    519.             // flush輸出流的緩沖  
    520.             out.flush();  
    521.             // 定義BufferedReader  
    522.   
    523. 輸入流來讀取URL的響應  
    524.             in = new   
    525.   
    526. BufferedReader(  
    527.                     new   
    528.   
    529. InputStreamReader  
    530.   
    531. (conn.getInputStream(), "UTF-  
    532.   
    533. 8"));  
    534.             String line;  
    535.             while ((line =   
    536.   
    537. in.readLine()) != null) {  
    538.                 result.append  
    539.   
    540. (line);  
    541.             }  
    542.         } catch (Exception e) {     
    543.   
    544.            
    545.             e.printStackTrace();  
    546.         }  
    547.         //使用finally塊來關閉輸出  
    548.   
    549. 流、輸入流  
    550.         finally{  
    551.             try{  
    552.                 if(out!=null){  
    553.                     out.close();  
    554.                 }  
    555.                 if(in!=null){  
    556.                     in.close();  
    557.                 }  
    558.             }  
    559.             catch(IOException   
    560.   
    561. ex){  
    562.                   
    563.   
    564. ex.printStackTrace();  
    565.             }  
    566.         }  
    567.         return result.toString();  
    568.     }  
    569.       
    570.       
    571.     private static char[]   
    572.   
    573. base64EncodeChars = new char[] {   
    574.         'A', 'B', 'C', 'D', 'E',   
    575.   
    576. 'F', 'G', 'H',   
    577.         'I', 'J', 'K', 'L', 'M',   
    578.   
    579. 'N', 'O', 'P',   
    580.         'Q', 'R', 'S', 'T', 'U',   
    581.   
    582. 'V', 'W', 'X',   
    583.         'Y', 'Z', 'a', 'b', 'c',   
    584.   
    585. 'd', 'e', 'f',   
    586.         'g', 'h', 'i', 'j', 'k',   
    587.   
    588. 'l', 'm', 'n',   
    589.         'o', 'p', 'q', 'r', 's',   
    590.   
    591. 't', 'u', 'v',   
    592.         'w', 'x', 'y', 'z', '0',   
    593.   
    594. '1', '2', '3',   
    595.         '4', '5', '6', '7', '8',   
    596.   
    597. '9', '+', '/' };   
    598.       
    599.     public static String   
    600.   
    601. base64Encode(byte[] data) {   
    602.         StringBuffer sb = new   
    603.   
    604. StringBuffer();   
    605.         int len = data.length;   
    606.         int i = 0;   
    607.         int b1, b2, b3;   
    608.         while (i < len) {   
    609.             b1 = data[i++] &   
    610.   
    611. 0xff;   
    612.             if (i == len)   
    613.             {   
    614.                 sb.append  
    615.   
    616. (base64EncodeChars[b1 >>> 2]);   
    617.                 sb.append  
    618.   
    619. (base64EncodeChars[(b1 & 0x3) <<   
    620.   
    621. 4]);   
    622.                 sb.append("==");   
    623.                 break;   
    624.             }   
    625.             b2 = data[i++] &   
    626.   
    627. 0xff;   
    628.             if (i == len)   
    629.             {   
    630.                 sb.append  
    631.   
    632. (base64EncodeChars[b1 >>> 2]);   
    633.                 sb.append  
    634.   
    635. (base64EncodeChars[((b1 & 0x03)   
    636.   
    637. << 4) | ((b2 & 0xf0) >>> 4)]);   
    638.                 sb.append  
    639.   
    640. (base64EncodeChars[(b2 & 0x0f) <<   
    641.   
    642. 2]);   
    643.                 sb.append("=");   
    644.                 break;   
    645.             }   
    646.             b3 = data[i++] &   
    647.   
    648. 0xff;   
    649.             sb.append  
    650.   
    651. (base64EncodeChars[b1 >>> 2]);   
    652.             sb.append  
    653.   
    654. (base64EncodeChars[((b1 & 0x03)   
    655.   
    656. << 4) | ((b2 & 0xf0) >>> 4)]);   
    657.             sb.append  
    658.   
    659. (base64EncodeChars[((b2 & 0x0f)   
    660.   
    661. << 2) | ((b3 & 0xc0) >>> 6)]);   
    662.             sb.append  
    663.   
    664. (base64EncodeChars[b3 & 0x3f]);   
    665.         }   
    666.         return sb.toString();   
    667.     }  
    668. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM