常用的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;publicclassKdniaoTrackQueryAPI{//DEMOpublicstaticvoidmain(String[] args){KdniaoTrackQueryAPI api =newKdniaoTrackQueryAPI();try{String result = api.getOrderTracesByJson("ANE","210001633605");System.out.print(result);}catch(Exception e) {e.printStackTrace();}}//电商IDprivateString EBusinessID="请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx";//电商加密私钥,快递鸟提供,注意保管,不要泄漏privateString AppKey="test";//请求urlprivateString ReqURL="http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";/*** Json方式 查询订单物流轨迹*@throwsException*/publicStringgetOrderTracesByJson(String expCode, String expNo)throwsException{String requestData="{'OrderCode':'','ShipperCode':'"+ expCode +"','LogisticCode':'"+ expNo +"'}";Map params =newHashMap();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);//根据公司业务处理返回的信息......returnresult;}/*** MD5加密*@paramstr 内容*@paramcharset 编码方式*@throwsException*/@SuppressWarnings("unused")privateStringMD5(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编码*@paramstr 内容*@paramcharset 编码方式*@throwsUnsupportedEncodingException*/privateStringbase64(String str, String charset)throwsUnsupportedEncodingException{String encoded = base64Encode(str.getBytes(charset));returnencoded;}@SuppressWarnings("unused")privateStringurlEncoder(String str, String charset)throwsUnsupportedEncodingException{String result = URLEncoder.encode(str, charset);returnresult;}/*** 电商Sign签名生成*@paramcontent 内容*@paramkeyValue Appkey*@paramcharset 编码方式*@throwsUnsupportedEncodingException ,Exception*@returnDataSign签名*/@SuppressWarnings("unused")privateStringencrypt(String content, String keyValue, String charset)throwsUnsupportedEncodingException, Exception{if(keyValue !=null){returnbase64(MD5(content + keyValue, charset), charset);}returnbase64(MD5(content, charset), charset);}/*** 向指定 URL 发送POST方法的请求*@paramurl 发送请求的 URL*@paramparams 请求的参数集合*@return远程资源的响应结果*/@SuppressWarnings("unused")privateStringsendPost(String url, Map
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 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','+','/'};publicstaticStringbase64Encode(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();}}