千家信息网

如何使用快递单号物流查询接口通用API

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了如何使用快递单号物流查询接口通用API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。快递查询接口通用API是给发货电
千家信息网最后更新 2025年11月07日如何使用快递单号物流查询接口通用API

这篇文章主要介绍了如何使用快递单号物流查询接口通用API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

快递查询接口通用API是给发货电商用来实现查询快递物流轨迹功能的,接口对接前要先到快递鸟网站申请接口秘钥和APIKEY

快递API的应用场景与用途

最常见的应用场景如下:

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

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

快递API的用途如下:

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

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

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

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

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

对接要求:

(1)、查询接口支持按照运单号查询(单个查询,并发不超过10个/S)。

(2)、指定的物流运单号选择相应的快递公司编码,格式不对或则编码错误都会返失败的信息。如EMS物流单号应选择快递公司编码(EMS)

(3)、返回的物流跟踪信息按照发生的时间升序排列。

(4)、接口指令1002

(5)、接口提供:快递鸟

(6)、请求地址:http://www.kdniao.com

java请求示例:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.security.MessageDigest;import java.util.HashMap;import java.util.Map; /** * * 单日超过500单查询量,建议接入物流轨迹订阅推送接口 *  */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="申请";    //电商加密私钥,注意保管,不要泄漏    private String AppKey="申请";    //请求url    private String ReqURL="http://api.kdniao.cc/Ebusiness/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;    }     /**     * 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();     }}

感谢你能够认真阅读完这篇文章,希望小编分享的"如何使用快递单号物流查询接口通用API"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

快递 物流 接口 查询 单号 订单 公司 状态 篇文章 系统 编码 网站 UTF-8 电商 信息 平台 管理系统 轨迹 管理 人员 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 东莞市互联网科技公司简介 和平精英服务器卡顿怎么办 车载网络技术的意义 新一代网络技术虚拟仿真实训基地 互联网科技有限公司名称 服务器远程启动需要什么硬件设施 电脑显示服务器打不开怎么办 科跃网络技术有限公司 网络安全简短的新闻 元数据库设计范本 小学生国家网络安全教育板报 数据库和模式是 十堰市软件开发学校 实现音乐c调的实验数据库 计算机数据库长度 自学什么数据库软件好 工信部信息网络安全员培训 计算机网络技术b卷答案 小飞侠 网络安全 百度网盘 中国网络安全保护中心 小米重装系统保留数据库 新一代网络技术虚拟仿真实训基地 平度软件开发便宜 杨浦区网络技术哪家好 河北网欣网络技术 教师网络安全会议宣传美篇 连接土地承包数据库失败怎么办 数据库教师表 网络安全翻译小组 云服务器实例规格在哪里
0