千家信息网

Java中怎么调用第三方快递物流快递单号查询api

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,Java中怎么调用第三方快递物流快递单号查询api,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第三方物流接口对比快递查询API有即时查
千家信息网最后更新 2024年11月11日Java中怎么调用第三方快递物流快递单号查询api

Java中怎么调用第三方快递物流快递单号查询api,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

第三方物流接口对比

快递查询API有即时查询和订阅查询两种,即时是请求即返回数据,订阅则是订阅快递单号到接口,有物流轨迹更新则全量返回数据。目前常用的有快递鸟、快递100、聚合数据、阿里云物流等。

快递鸟即时API可以查询3000次,3000以上接订阅接口,统一接口模式接入,常用快递均支持查询,还有订阅API、在线下单API、电子面单API,接口均不收取费用,没有要求用户添加外链,支持418家国内外快递物流查询。

快递100每天可以免费查询2000次,超过2000次收费,每次0.06~0.1元不等,如果查询的量大的话可以降低费用,免费的接口有几家常用快递不支持接口模式,只支持htmlAPI,要求用户添加外链,支持300多家国内外快递物流查询。

因为公司用的都是快递鸟的产品,所以这里最后选择了快递鸟的物流API。

接口说明:

java对接: `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 {

//DEMOpublic 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();    }}//电商IDprivate String EBusinessID="1330422";//电商加密私钥,快递鸟提供,注意保管,不要泄漏private String AppKey="7611818b-6279-4398-8747-df2ca39e86b4";//请求urlprivate String ReqURL="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";   /** * Json方式 查询订单物流轨迹 * [@throws](https://my.oschina.net/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](https://my.oschina.net/u/2303379) 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(); }

}`

看完上述内容,你们掌握Java中怎么调用第三方快递物流快递单号查询api的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

快递 查询 物流 接口 订阅 内容 UTF-8 支持 数据 方式 方法 编码 轨迹 电商 单号 第三方 公司 输出 参数 常用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 全国网络安全专业大学 数据库表怎样设计约束条件 东方财富交易服务器ip 三大数据库的布尔逻辑关系 北辰区信息网络技术答疑解惑 豆客服务器能玩cs吗 工信部 网络安全 检测 航空通信软件开发 国安网络安全竞赛答题给分规则 各大公司的云数据库产品 JAVA三层数据库开发 红高粱下载软件开发 彩云归是哪个服务器的 乐山软件开发就看青岗科技 我的世界生存服务器地址 软件开发 集成 合同 网络安全讲座的视频 网络安全团日感想 虚拟机本地数据库安装后启动不了 天津云服务器租用大概多少钱 2012软件开发工程 以太无源光网络技术最大传输距离 明日之后伊尼山是哪个服务器 怎么查找公司大数据库 数据库的安全保密设计方法 网络安全教育测试题 网络安全宣传周保密标语 企业实时数据库厂家 创建数据库有数据文件日志文件 北京轻松筹网络技术有限公司
0