package com.matrix.biz.action;
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.net.URLEncoder;
|
import java.security.MessageDigest;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
/**
|
* 实时查询请求Demo
|
* @author Administrator
|
*
|
*/
|
public class SynQueryDemo {
|
|
public static void main(String[] args) {
|
String key = "RFGYfbVI747"; //贵司的授权key
|
String customer = "244D09E91F5500D0AB888299959835A2"; //贵司的查询公司编号
|
String com = "shunfeng"; //快递公司编码
|
String num = "232581179302"; //快递单号
|
String phone = ""; //手机号码后四位
|
String from = ""; //出发地
|
String to = ""; //目的地
|
int resultv2 = 0; //开启行政规划解析
|
|
SynQueryDemo demo = new SynQueryDemo(key, customer);
|
String result = demo.synQueryData(com, num, phone, from, to, resultv2);
|
System.out.println(result);
|
}
|
|
/**
|
* 实时查询请求地址
|
*/
|
private static final String SYNQUERY_URL = "http://poll.kuaidi100.com/poll/query.do";
|
|
private String key; //授权key
|
private String customer; //实时查询公司编号
|
|
public SynQueryDemo(String key, String customer) {
|
this.key = key;
|
this.customer = customer;
|
}
|
|
/**
|
* 实时查询快递单号
|
* @param com 快递公司编码
|
* @param num 快递单号
|
* @param phone 手机号
|
* @param from 出发地城市
|
* @param to 目的地城市
|
* @param resultv2 开通区域解析功能:0-关闭;1-开通
|
* @return
|
*/
|
public String synQueryData(String com, String num, String phone, String from, String to, int resultv2) {
|
|
StringBuilder param = new StringBuilder("{");
|
param.append("\"com\":\"").append(com).append("\"");
|
param.append(",\"num\":\"").append(num).append("\"");
|
param.append(",\"phone\":\"").append(phone).append("\"");
|
param.append(",\"from\":\"").append(from).append("\"");
|
param.append(",\"to\":\"").append(to).append("\"");
|
if(1 == resultv2) {
|
param.append(",\"resultv2\":1");
|
} else {
|
param.append(",\"resultv2\":0");
|
}
|
param.append("}");
|
|
Map<String, String> params = new HashMap<String, String>();
|
params.put("customer", this.customer);
|
String sign = MD5Utils.encode(param + this.key + this.customer);
|
params.put("sign", sign);
|
params.put("param", param.toString());
|
|
return this.post(params);
|
}
|
|
/**
|
* 发送post请求
|
*/
|
public String post(Map<String, String> params) {
|
StringBuffer response = new StringBuffer("");
|
|
BufferedReader reader = null;
|
try {
|
StringBuilder builder = new StringBuilder();
|
for (Map.Entry<String, String> param : params.entrySet()) {
|
if (builder.length() > 0) {
|
builder.append('&');
|
}
|
builder.append(URLEncoder.encode(param.getKey(), "UTF-8"));
|
builder.append('=');
|
builder.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
|
}
|
byte[] bytes = builder.toString().getBytes("UTF-8");
|
|
URL url = new URL(SYNQUERY_URL);
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
conn.setConnectTimeout(3000);
|
conn.setReadTimeout(3000);
|
conn.setRequestMethod("POST");
|
conn.setRequestProperty("accept", "*/*");
|
conn.setRequestProperty("connection", "Keep-Alive");
|
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
conn.setRequestProperty("Content-Length", String.valueOf(bytes.length));
|
conn.setDoOutput(true);
|
conn.getOutputStream().write(bytes);
|
|
reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
|
|
String line = "";
|
while ((line = reader.readLine()) != null) {
|
response.append(line);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
if (null != reader) {
|
reader.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
|
return response.toString();
|
}
|
}
|
|
/**
|
* md5加密
|
*/
|
class MD5Utils {
|
private static MessageDigest mdigest = null;
|
private static char digits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
|
|
private static MessageDigest getMdInst() {
|
if (null == mdigest) {
|
try {
|
mdigest = MessageDigest.getInstance("MD5");
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace();
|
}
|
}
|
return mdigest;
|
}
|
|
public static String encode(String s) {
|
if(null == s) {
|
return "";
|
}
|
|
try {
|
byte[] bytes = s.getBytes();
|
getMdInst().update(bytes);
|
byte[] md = getMdInst().digest();
|
int j = md.length;
|
char str[] = new char[j * 2];
|
int k = 0;
|
for (int i = 0; i < j; i++) {
|
byte byte0 = md[i];
|
str[k++] = digits[byte0 >>> 4 & 0xf];
|
str[k++] = digits[byte0 & 0xf];
|
}
|
return new String(str);
|
} catch (Exception e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
}
|