zoukankan      html  css  js  c++  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;

    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

      //json方式 查询订单物流轨迹
      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");
        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();
      }

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

      @SuppressWarnings("unused")
      private String sendPost(String url, Map<String, String> params) {
        OutputStreamWriter out = null;
        BufferedReader in = null; 
        StringBuilder result = new StringBuilder(); 
        try {

          //创建URL对象
          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());
          }
          // 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(); 
      }
    }

  • 相关阅读:
    CodeForces 156B Suspects(枚举)
    CodeForces 156A Message(暴力)
    CodeForces 157B Trace
    CodeForces 157A Game Outcome
    HDU 3578 Greedy Tino(双塔DP)
    POJ 2609 Ferry Loading(双塔DP)
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制
  • 原文地址:https://www.cnblogs.com/liuqu/p/7477329.html
Copyright © 2011-2022 走看看