基于java的圆通快递单号自动识别api接口代码实例

一、产品介绍

输入运单号自动识别物流公司,实时返回对应物流公司编码。查询单号时,返回的结果可能存在一个或多个物流公司编码,快递鸟大数据平台通过智能分析,实时更新单号库,保障物流公司编码准确率。自动识别物流公司。

基于java的圆通快递单号自动识别api接口代码实例

二、产品优势

实时查询:输入运单号自动识别物流公司编码,结合物流轨迹查询接口完成轨迹查询功能。(单号识别使用次数:3万次/天)

基于java的圆通快递单号自动识别api接口代码实例

三、圆通快递单号自动识别接口实例

圆通快递单号识别地址:http://www.kdniao.com/

基于java的圆通快递单号自动识别api接口代码实例
基于java的圆通快递单号自动识别api接口代码实例

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.io.UnsupportedEncodingException;

importjava.net.HttpURLConnection;

importjava.net.URL;

importjava.net.URLEncoder;

importjava.security.MessageDigest;

importjava.util.HashMap;

importjava.util.Map;

/**

 *

 * 快递鸟单号识别接口

 *

 *

 * ID和Key请到官网申请:http://www.kdniao.com/ServiceApply.aspx

 */

publicclassKdApiOrderDistinguish {

    //DEMO

    publicstaticvoidmain(String[] args) {

        KdApiOrderDistinguish api = newKdApiOrderDistinguish();

        try{

            String result = api.getOrderTracesByJson(“3967950525457”);

            System.out.print(result);

        } catch(Exception e) {

            e.printStackTrace();

        }

    }

    //电商ID

    privateString EBusinessID=”请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx”;

    //电商加密私钥,快递鸟提供,注意保管,不要泄漏

    privateString AppKey=”请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx”;

    //请求url

    privateString ReqURL=”http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx”;  

    /**

     * Json方式 单号识别

     * @throws Exception

     */

    publicString getOrderTracesByJson(String expNo) throwsException{

        String requestData= “{‘LogisticCode’:'”+ expNo + “‘}”;

        Map<String, String> params = newHashMap<String, String>();

        params.put(“RequestData”, urlEncoder(requestData, “UTF-8”));

        params.put(“EBusinessID”, EBusinessID);

        params.put(“RequestType”, “2002”);

        String dataSign=encrypt(requestData, AppKey, “UTF-8”);

        params.put(“DataSign”, urlEncoder(dataSign, “UTF-8”));

        params.put(“DataType”, “2”);

        String result=sendPost(ReqURL, params);

        //根据公司业务处理返回的信息……

        returnresult;

    }

    /**

     * MD5加密

     * @param str 内容      

     * @param charset 编码方式

     * @throws Exception

     */

    @SuppressWarnings(“unused”)

    privateString MD5(String str, String charset) throwsException {

        MessageDigest md = MessageDigest.getInstance(“MD5”);

        md.update(str.getBytes(charset));

        byte[] result = md.digest();

        StringBuffer sb = newStringBuffer(32);

        for(inti = 0; i < result.length; i++) {

            intval = result[i] & 0xff;

            if(val <= 0xf) {

                sb.append(“0”);

            }

            sb.append(Integer.toHexString(val));

        }

        returnsb.toString().toLowerCase();

    }

    /**

     * base64编码

     * @param str 内容      

     * @param charset 编码方式

     * @throws UnsupportedEncodingException

     */

    privateString base64(String str, String charset) throwsUnsupportedEncodingException{

        String encoded = base64Encode(str.getBytes(charset));

        returnencoded;   

    }  

    @SuppressWarnings(“unused”)

    privateString urlEncoder(String str, String charset) throwsUnsupportedEncodingException{

        String result = URLEncoder.encode(str, charset);

        returnresult;

    }

    /**

     * 电商Sign签名生成

     * @param content 内容  

     * @param keyValue Appkey 

     * @param charset 编码方式

     * @throws UnsupportedEncodingException ,Exception

     * @return DataSign签名

     */

    @SuppressWarnings(“unused”)

    privateString encrypt (String content, String keyValue, String charset) throwsUnsupportedEncodingException, Exception

    {

        if(keyValue != null)

        {

            returnbase64(MD5(content + keyValue, charset), charset);

        }

        returnbase64(MD5(content, charset), charset);

    }

     /**

     * 向指定 URL 发送POST方法的请求    

     * @param url 发送请求的 URL   

     * @param params 请求的参数集合    

     * @return 远程资源的响应结果

     */

    @SuppressWarnings(“unused”)

    privateString sendPost(String url, Map<String, String> params) {

        OutputStreamWriter out = null;

        BufferedReader in = null;       

        StringBuilder result = newStringBuilder();

        try{

            URL realUrl = newURL(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 = newOutputStreamWriter(conn.getOutputStream(), “UTF-8”);

            // 发送请求参数           

            if(params != null) {

                  StringBuilder param = newStringBuilder();

                  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 = newBufferedReader(

                    newInputStreamReader(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();

            }

        }

        returnresult.toString();

    }

    privatestaticchar[] base64EncodeChars = newchar[] {

        ‘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’, ‘+’, ‘/’};

    publicstaticString base64Encode(byte[] data) {

        StringBuffer sb = newStringBuffer();

        intlen = data.length;

        inti = 0;

        intb1, 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]);

        }

        returnsb.toString();

    }

}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注