文档章节

快递(即时查询)

 流去
发布于 2017/09/05 11:15
字数 671
阅读 0
收藏 0
点赞 0
评论 0

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; 

public class KdniaoTrackQueryAPI {

    //主方法入口
    public static void main(String[] args) {
        KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();
        try {
            String result = api.getOrderTracesByJson("sto", "402659170518");   
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private String EBusinessID="";                                                                                         //电商ID
    private String AppKey="";                                                                                                //电商私钥
    private String ReqURL="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";  //接口URL 
     

    //封装参数,发送POST请求
    public String getOrderTracesByJson(String expCode, String expNo) throws Exception{
       String requestData= "{'OrderCode':'','ShipperCode':'" + expCode +

                                        "','LogisticCode':'" + expNo + "'}";
        Map<String, String> params = new HashMap<String, String>();
        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");
        System.out.println(params.get("RequestData"));
        System.out.println(params.get("DataSign"));
        String result=sendPost(ReqURL, params);     
        //根据公司业务处理返回的信息......  
        return result;
    }

    //MD5加密
    @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();
    }
    
    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签名生成
    @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方法的请求
    @SuppressWarnings("unused")
    private String sendPost(String url, Map<String, String> 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<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());
            }
            out.flush();                                 // flush输出流的缓冲
            in = new BufferedReader(        // 定义BufferedReader输入流来读取URL的响应
                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (Exception e) {            
            e.printStackTrace();
        }
        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', '+', '/' }; 


    //base64编码
    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(); 
    }
}

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 25
码字总数 1752
作品 0
杭州
menduo/kdniao_python

kdniao_python 快递鸟 kdniao python sdk, with tornado async http client support. github: https://github.com/menduo/kdniaopython oschina: https://git.oschina.net/menduo/kdniaopyth......

menduo ⋅ 2017/03/08 ⋅ 0

2009十大物联网产品

Pachube 英国一家初创公司。Pachube允许你标记并分享即时传感器数据(来自物体、设备、建筑物,以及虚拟和实体环境)。公司创始人Usman Haque称,与其说Pachube和传感器有关,倒不如说其和环...

老枪 ⋅ 2009/12/13 ⋅ 3

订单快递单号及查询快递进度

订单快递单号及查询快递进度 何须非要使用快递100,爱查等接口来获得快递进度信息?何必非要给自己的网站带上紧箍咒?为何不将选择权给自己的网站客户? 该插件可以: 1. 网站管理员在后台增...

OpenCart中国 ⋅ 2015/07/28 ⋅ 0

刷脸取件+超大容量,菜鸟新物种“快递塔”现身西溪园区

雷锋网消息 日前,菜鸟网络在杭州的智慧物流大会上推出了末端智能设备——菜鸟小盒。正当人们意犹未尽之时,菜鸟网络再次出手,推出了智慧物流新物种——菜鸟快递塔。 该快递塔坐落在阿里巴巴...

刘伟 ⋅ 06/06 ⋅ 0

快递单号查询的记录

经过一段时间的努力,快递单号查询www.aikuaidi.cn弄好了,希望能为经常需要查快递的朋友带来方便,本站基本上整合了国内大部分知名单号的查询。而且只需要输入单号即可查询,非常的方便,希...

wangdianchaxun ⋅ 2014/03/25 ⋅ 1

QQ公众号?是的,你没看错!

  微信公众平台培育了800多万的微信公众号,自身也通过微信游戏、广告分销等找到了一些增值盈利模式。作为同门大师兄,qq也在11月份推出了QQ公众号,第一个手机QQ上的“生活服务号”——Y...

ytkahcom ⋅ 2014/11/24 ⋅ 0

haoservice常用快递数据

涵盖国内主流快递及部分国际邮政、国际快递,轻松查询超过200家快递,查询精确,是各大网上商城等的明智选择,,http://www.haoservice.com/docs/18

fuangji ⋅ 2016/10/25 ⋅ 1

常用快递

常用快递 涵盖国内主流快递及部分国际邮政、国际快递,轻松查询超过200家快递 http://www.haoservice.com/docs/18 1、快递公司编号对照表 2、常用快递查询API 3、提交推送快递单号 4、状态回...

fuangji ⋅ 2016/10/25 ⋅ 0

常用快递API(顺丰、EMS、申通、圆通等)及快递在线下单API分享

1.常用快递API 支持顺丰、EMS、申通、圆通、韵达、汇通、中通、天天、德邦、全峰等主流快递公司。 1.1常用快递查询API 接口地址:http://v.juhe.cn/exp/index 支持格式:json/xml 请求方式:...

熊babi ⋅ 2016/11/09 ⋅ 0

常用快递API及快递在线下单API分享

1.常用快递API 支持顺丰、EMS、申通、圆通、韵达、汇通、中通、天天、德邦、全峰等主流快递公司。 文档地址:https://www.juhe.cn/docs/api/id/43 1.1常用快递查询API 接口地址:http://v.ju...

请天点 ⋅ 2016/11/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 42分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 47分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 今天 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 今天 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 今天 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 今天 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 今天 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 今天 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 今天 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部