免费常用的快递物流查询api接口介绍

快递查询接口API
快递查询接口是指快递查询网对外开放的应用程序接口,开发人员能够通过调用该接口与快递查询网进行交互,并基于该接口开发自己的快递查询应用程序。目前比较常用的第三方接口有快递鸟。

应用场景

  1. 最常见的应用场景如下:

(1)电商网站:例如B2C、团购、B2B、批发分销站、C2C、本地生活交易等网站。

(2)管理系统:订单处理平台、订货平台、发货平台、分销系统、渠道管理系统、客户管理系统、ERP等。

  1. 快递API的用途如下:

(1)让顾客登录网站后,直接在“我的订单”页面内就能看到订单的物流状态。

(2)自动筛选出“已签收”、“疑难件”等状态的单号,减轻物流跟单人员的压力。

(3)改变订单的状态和交易流程,例如单号变为“已签收”,就能让订单变为可以确认退换货等。

(4)评估选择快递公司,根据“已签收”的运单数,可以算出销售人员的业绩,且便于应对货到付款的结算。

(5)邮件、短信提醒用户运单的最新状态,可以安抚用户,也可以利用邮件短信二次营销

对接说明
不同公司的快递查询接口接入类似,到快递鸟上申请账号获取KEY和ID,如果是订阅接口需要技术联调。
根据快递单号和快递公司编码查询物流轨迹信息。接口需要指定快递单号的快递公司编码,格式不对或则编码错误都会返失败的信息。如:申通物流单号应选择快递公司编码(STO),查看快递公司编码返回的物流跟踪信息按照发生的时间升序排列。
请求系统参数:
免费常用的快递物流查询api接口介绍_第1张图片
返回参数定义
免费常用的快递物流查询api接口介绍_第2张图片
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 params = new   
  
HashMap();  
        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= ""+  
                      
  
        ""+  
                      
  
          
  
""+  
                      
  
          
  
"SF"+  
                      
  
          
  
"589707398027"+  
                      
  
        "";  
          
        Map params = new   
  
HashMap();  
        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   
  
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 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();   
    }  
}  

你可能感兴趣的