千家信息网

快递物流单号识别查询api接口调用对接的示例分析

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下快递物流单号识别查询api接口调用对接的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!免费获取源
千家信息网最后更新 2025年11月08日快递物流单号识别查询api接口调用对接的示例分析

小编给大家分享一下快递物流单号识别查询api接口调用对接的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

免费获取源码地址:

https://github.com/lzy2626/LogisticsInfoTest

《即时查询》的接口:

RequestData和DataSign 都是签名后的数据。其他三个都是固定写法。

快递鸟api实现物流即时查询

1.首先要有一个快递鸟账号,根据对方的要求,完善用户申请。

2.根据自己的需求,开通服务

3.进入"我的API接口",根据"接口"中的开发文档了解设计需求,下载官方demo,编辑为适合自己的代码。

【即时查询】代码实现

1.修改官方的demo代码,我在此分离出了一个快递类,提高适用性

2.引入类文件,实例化并进行测试

demo请求数据:

package com.zs.app; 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; /** * * 快递鸟物流轨迹即时查询接口 * * @技术QQ群: 456320272 * @see: http://www.kdniao.com/YundanChaxunAPI.aspx * @copyright: 深圳市快金数据技术服务有限公司 * * DEMO中的电商ID与私钥仅限测试使用,正式环境请单独注册账号 * 单日超过500单查询量,建议接入我方物流轨迹订阅推送接口 * * ID和Key请到官网申请:http://www.kdniao.com/ServiceApply.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="1330422";    //电商加密私钥,快递鸟提供,注意保管,不要泄漏    private String AppKey="7611818b-6279-4398-8747-df2ca39e86b4";    //请求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("MessContent-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安全错误 数据库的锁怎样保障安全 苹果邮件未从服务器下载 2000数据库怎么取消自动备份 服务器及网络设备管理制度 泰拉瑞亚加入不了别人的服务器 数据库运用技术 SQL 怎样组织软件开发团队 学习网络技术的心得体会 网络安全保卫与技术侦察总队 世界十大黑客数据库 规范数据库结构设计 淮安软件开发推荐咨询 有什么可以学习网络技术的 潜江软件开发多少钱 软件开发文档编制的质量要求 程序员服务器代码安全 重庆的腾讯云服务器在哪 网络安全层面的特性不包括 小程序云开发没有数据库吗 软件开发公司拓客 罗宁服务器怎么样 java和数据库有关系么 为什么最近要加强网络安全 银行转账显示数据库表读错误 网络安全宣传资料2021 我国网络安全网民数量世界第 数据库查看表内容的命令是 怎么给自己的服务器设置菜单 宁波亲笔信网络技术有限公司 时间ntp服务器地址 咋样提升网络安全
0