國內主流常用快遞物流查詢api接口介紹以及demo分享

快遞查詢接口API
快遞查詢接口是指快遞查詢網對外開放的應用程序接口,開發人員能夠通過調用該接口與快遞查詢網進行交互,並基於該接口開發自己的快遞查詢應用程序。目前比較常用的第三方接口有快遞鳥。一次性可以接入400多家快遞物流公司接口,在後期的技術維護也會省下很多工作。
官方網址: http://www.kdniao.com
即時查詢api接口地址: http://www.kdniao.com/api-track
需要登錄 ,申請一下 用戶ID 和 API key,並進行實名認證開通自己相關的快遞服務,有免費和增值服務體驗。
接入流程:
在這裏插入圖片描述
應用場景

  1. 最常見的應用場景如下:
    (1)電商網站:例如B2C、團購、B2B、批發分銷站、C2C、本地生活交易等網站。
    (2)管理系統:訂單處理平臺、訂貨平臺、發貨平臺、分銷系統、渠道管理系統、客戶管理系統、ERP等。
  2. 快遞API的用途如下:
    (1)讓顧客登錄網站後,直接在“我的訂單”頁面內就能看到訂單的物流狀態。
    (2)自動篩選出“已簽收”、“疑難件”等狀態的單號,減輕物流跟單人員的壓力。
    (3)改變訂單的狀態和交易流程,例如單號變爲“已簽收”,就能讓訂單變爲可以確認退換貨等。
    (4)評估選擇快遞公司,根據“已簽收”的運單數,可以算出銷售人員的業績,且便於應對貨到付款的結算。
    (5)郵件、短信提醒用戶運單的最新狀態,可以安撫用戶,也可以利用郵件短信二次營銷
    對接說明
    不同公司的快遞查詢接口接入類似,到快遞鳥上申請賬號獲取KEY和ID,如果是訂閱接口需要技術聯調。
    根據快遞單號和快遞公司編碼查詢物流軌跡信息。接口需要指定快遞單號的快遞公司編碼,格式不對或則編碼錯誤都會返失敗的信息。如:申通物流單號應選擇快遞公司編碼(STO),查看快遞公司編碼返回的物流跟蹤信息按照發生的時間升序排列。
    在這裏插入圖片描述
    Java調用示例
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import
java.io.OutputStreamWriter;  
import   
  
java.io.UnsupportedEncodingExcept  
  
ion;  
import   
  
java.net.HttpURLConnection;  
import java.net.URL;  
import java.net.URLEncoder;  
import   
  
java.security.MessageDigest;  
import java.util.HashMap;  
import java.util.Map;   
  
/** 
* 
* 快遞鳥物流軌跡即時查詢接口 
* 
* @技術QQ羣: 456320272 
* @see:  

http://www.kdniao.com/YundanChaxu 

nAPI.aspx 
* @copyright: 深圳市快金數據技術 

服務有限公司 
* 
* DEMO中的電商ID與私鑰僅限測試使 

用,正式環境請單獨註冊賬號 
* 單日超過500單查詢量,建議接入 

我方物流軌跡訂閱推送接口 
*  
* ID和Key請到官網申請: 

http://www.kdniao.com/ServiceAppl 

y.aspx 
*/  
  
public class KdniaoTrackQueryAPI   
  
{  
      
    //DEMO  
    public static void main  
  
(String[] args) {  
          
  
KdniaoTrackQueryAPI api = new   
  
KdniaoTrackQueryAPI();  
        try {  
            String   
  
result =   
  
api.getOrderTracesByJson("ANE",   
  
"210001633605");  
              
  
System.out.print(result);  
              
        } catch   
  
(Exception e) {  
              
  
e.printStackTrace();  
        }  
    }  
      
    //電商ID  
    private String   
  
EBusinessID="請到快遞鳥官網申請  
  
http://www.kdniao.com/ServiceAppl  
  
y.aspx";  
    //電商加密私鑰,快遞鳥提  
  
供,注意保管,不要泄漏  
    private String AppKey="請  
  
到快遞鳥官網申請  
  
http://www.kdniao.com/ServiceAppl  
  
y.aspx";  
    //請求url  
    private String   
  
ReqURL="http://api.kdniao.cc/Ebus  
  
iness/EbusinessOrderHandle.aspx";     
   
    /** 
     * Json方式 查詢訂單物流軌跡 
     * @throws Exception  
     */  
    public String   
  
getOrderTracesByJson(String   
  
expCode, String expNo) throws   
  
Exception{  
        String   
  
requestData=   
  
"{'OrderCode':'','ShipperCode':'"   
  
+ expCode + "','LogisticCode':'"   
  
+ expNo + "'}";  
          
        Map<String,   
  
String> params = new   
  
HashMap<String, String>();  
        params.put  
  
("RequestData", urlEncoder  
  
(requestData, "UTF-8"));  
        params.put  
  
("EBusinessID", EBusinessID);  
        params.put  
  
("RequestType", "1002");  
        String   
  
dataSign=encrypt(requestData,   
  
AppKey, "UTF-8");  
        params.put  
  
("DataSign", urlEncoder(dataSign,   
  
"UTF-8"));  
        params.put  
  
("DataType", "2");  
          
        String   
  
result=sendPost(ReqURL, params);      
          
        //根據公司業務處  
  
理返回的信息......  
          
        return result;  
    }  
      
    /** 
     * XML方式 查詢訂單物流軌跡 
     * @throws Exception  
     */  
    public String   
  
getOrderTracesByXml() throws   
  
Exception{  
        String   
  
requestData= "<?xml version=  
  
\"1.0\" encoding=\"utf-8\" ?>"+  
                      
  
        "<Content>"+  
                      
  
          
  
"<OrderCode></OrderCode>"+  
                      
  
          
  
"<ShipperCode>SF</ShipperCode>"+  
                      
  
          
  
"<LogisticCode>589707398027</Logi  
  
sticCode>"+  
                      
  
        "</Content>";  
          
        Map<String,   
  
String> params = new   
  
HashMap<String, String>();  
        params.put  
  
("RequestData", urlEncoder  
  
(requestData, "UTF-8"));  
        params.put  
  
("EBusinessID", EBusinessID);  
        params.put  
  
("RequestType", "1002");  
        String   
  
dataSign=encrypt(requestData,   
  
AppKey, "UTF-8");  
        params.put  
  
("DataSign", urlEncoder(dataSign,   
  
"UTF-8"));  
        params.put  
  
("DataType", "1");  
          
        String   
  
result=sendPost(ReqURL, params);      
          
        //根據公司業務處  
  
理返回的信息......  
          
        return result;  
    }  
   
    /** 
     * MD5加密 
     * @param str 內容        
     * @param charset 編碼方式 
     * @throws Exception  
     */  
    @SuppressWarnings  
  
("unused")  
    private String MD5(String   
  
str, String charset) throws   
  
Exception {  
        MessageDigest md =   
  
MessageDigest.getInstance("MD5");  
        md.update  
  
(str.getBytes(charset));  
        byte[] result =   
  
md.digest();  
        StringBuffer sb = new   
  
StringBuffer(32);  
        for (int i = 0; i <   
  
result.length; i++) {  
            int val = result  
  
[i] & 0xff;  
            if (val <= 0xf) {  
                sb.append  
  
("0");  
            }  
            sb.append  
  
(Integer.toHexString(val));  
        }  
        return sb.toString  
  
().toLowerCase();  
    }  
      
    /** 
     * base64編碼 
     * @param str 內容        
     * @param charset 編碼方式 
     * @throws  

UnsupportedEncodingException  
     */  
    private String base64  
  
(String str, String charset)   
  
throws   
  
UnsupportedEncodingException{  
        String encoded =   
  
base64Encode(str.getBytes  
  
(charset));  
        return encoded;     
  
   
    }     
      
    @SuppressWarnings  
  
("unused")  
    private String   
  
urlEncoder(String str, String   
  
charset) throws   
  
UnsupportedEncodingException{  
        String result =   
  
URLEncoder.encode(str, charset);  
        return result;  
    }  
      
    /** 
     * 電商Sign簽名生成 
     * @param content 內容    
     * @param keyValue Appkey   
     * @param charset 編碼方式 
     * @throws  

UnsupportedEncodingException  

,Exception 
     * @return DataSign簽名 
     */  
    @SuppressWarnings  
  
("unused")  
    private String encrypt   
  
(String content, String keyValue,   
  
String charset) throws   
  
UnsupportedEncodingException,   
  
Exception  
    {  
        if (keyValue !=   
  
null)  
        {  
            return   
  
base64(MD5(content + keyValue,   
  
charset), charset);  
        }  
        return base64  
  
(MD5(content, charset), charset);  
    }  
      
     /** 
     * 向指定 URL 發送POST方法的 

請求      
     * @param url 發送請求的 URL   

   
     * @param params 請求的參數集 

合      
     * @return 遠程資源的響應結果 
     */  
    @SuppressWarnings  
  
("unused")  
    private String sendPost  
  
(String url, Map<String, String>   
  
params) {  
        OutputStreamWriter out =   
  
null;  
        BufferedReader in = null;   
  
         
        StringBuilder result =   
  
new StringBuilder();   
        try {  
            URL realUrl = new   
  
URL(url);  
            HttpURLConnection   
  
conn =(HttpURLConnection)   
  
realUrl.openConnection();  
            // 發送POST請求必須設  
  
置如下兩行  
            conn.setDoOutput  
  
(true);  
            conn.setDoInput  
  
(true);  
            // POST方法  
              
  
conn.setRequestMethod("POST");  
            // 設置通用的請求屬性  
              
  
conn.setRequestProperty("accept",   
  
"*/*");  
              
  
conn.setRequestProperty  
  
("connection", "Keep-Alive");  
              
  
conn.setRequestProperty("user-  
  
agent",  
                    "Mozilla/4.0   
  
(compatible; MSIE 6.0; Windows NT   
  
5.1;SV1)");  
              
  
conn.setRequestProperty  
  
("Content-Type", "application/x-  
  
www-form-urlencoded");  
            conn.connect();  
            // 獲取URLConnection  
  
對象對應的輸出流  
            out = new   
  
OutputStreamWriter  
  
(conn.getOutputStream(), "UTF-  
  
8");  
            // 發送請求參數         
  
       
            if (params != null) {  
                    
  
StringBuilder param = new   
  
StringBuilder();   
                  for   
  
(Map.Entry<String, String> entry   
  
: params.entrySet()) {  
                        
  
if(param.length()>0){  
                          
  
  param.append("&");  
                        
  
}                   
                        
  
param.append(entry.getKey());  
                        
  
param.append("=");  
                        
  
param.append(entry.getValue());       
  
                
                        
  
//System.out.println  
  
(entry.getKey  
  
()+":"+entry.getValue());  
                  }  
                    
  
//System.out.println  
  
("param:"+param.toString());  
                    
  
out.write(param.toString());  
            }  
            // flush輸出流的緩衝  
            out.flush();  
            // 定義BufferedReader  
  
輸入流來讀取URL的響應  
            in = new   
  
BufferedReader(  
                    new   
  
InputStreamReader  
  
(conn.getInputStream(), "UTF-  
  
8"));  
            String line;  
            while ((line =   
  
in.readLine()) != null) {  
                result.append  
  
(line);  
            }  
        } catch (Exception e) {     
  
           
            e.printStackTrace();  
        }  
        //使用finally塊來關閉輸出  
  
流、輸入流  
        finally{  
            try{  
                if(out!=null){  
                    out.close();  
                }  
                if(in!=null){  
                    in.close();  
                }  
            }  
            catch(IOException   
  
ex){  
                  
  
ex.printStackTrace();  
            }  
        }  
        return result.toString();  
    }  
      
      
    private static char[]   
  
base64EncodeChars = new char[] {   
        'A', 'B', 'C', 'D', 'E',   
  
'F', 'G', 'H',   
        'I', 'J', 'K', 'L', 'M',   
  
'N', 'O', 'P',   
        'Q', 'R', 'S', 'T', 'U',   
  
'V', 'W', 'X',   
        'Y', 'Z', 'a', 'b', 'c',   
  
'd', 'e', 'f',   
        'g', 'h', 'i', 'j', 'k',   
  
'l', 'm', 'n',   
        'o', 'p', 'q', 'r', 's',   
  
't', 'u', 'v',   
        'w', 'x', 'y', 'z', '0',   
  
'1', '2', '3',   
        '4', '5', '6', '7', '8',   
  
'9', '+', '/' };   
      
    public static String   
  
base64Encode(byte[] data) {   
        StringBuffer sb = new   
  
StringBuffer();   
        int len = data.length;   
        int i = 0;   
        int b1, b2, b3;   
        while (i < len) {   
            b1 = data[i++] &   
  
0xff;   
            if (i == len)   
            {   
                sb.append  
  
(base64EncodeChars[b1 >>> 2]);   
                sb.append  
  
(base64EncodeChars[(b1 & 0x3) <<   
  
4]);   
                sb.append("==");   
                break;   
            }   
            b2 = data[i++] &   
  
0xff;   
            if (i == len)   
            {   
                sb.append  
  
(base64EncodeChars[b1 >>> 2]);   
                sb.append  
  
(base64EncodeChars[((b1 & 0x03)   
  
<< 4) | ((b2 & 0xf0) >>> 4)]);   
                sb.append  
  
(base64EncodeChars[(b2 & 0x0f) <<   
  
2]);   
                sb.append("=");   
                break;   
            }   
            b3 = data[i++] &   
  
0xff;   
            sb.append  
  
(base64EncodeChars[b1 >>> 2]);   
            sb.append  
  
(base64EncodeChars[((b1 & 0x03)   
  
<< 4) | ((b2 & 0xf0) >>> 4)]);   
            sb.append  
  
(base64EncodeChars[((b2 & 0x0f)   
  
<< 2) | ((b3 & 0xc0) >>> 6)]);   
            sb.append  
  
(base64EncodeChars[b3 & 0x3f]);   
        }   
        return sb.toString();   
    }  
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章