复制以下代码就可以直接用
接口工具类:
private static final String SYNQUERY_URL = "http://poll.kuaidi100.com/poll/query.do"; //实时查询请求地址
private String key; //授权key
private String customer; //公司编号
public SynQueryUtil(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 ResponseData 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 = MD5Util.encode(param + this.key + this.customer);
params.put("sign", sign);
params.put("param", param.toString());
String responseJson = this.post(params);
Map<String, Object> jsonObject = JSONObject.fromObject(responseJson);
/*拼接data集合*/
List<Map<String, String>> dataList = (List) jsonObject.get("data");
List<LogisticsData> logisticsDataList = new ArrayList<>();
LogisticsData logisticsData = null;
for (int i = 0; i < dataList.size(); i++) {
Map<String, String> dataMap = dataList.get(i);
logisticsData = new LogisticsData();
logisticsData.setContext(dataMap.get("context"));
logisticsData.setTime(dataMap.get("time"));
logisticsData.setFtime(dataMap.get("ftime"));
logisticsData.setStatus(dataMap.get("status"));
logisticsData.setAreaCode(dataMap.get("areaCode"));
logisticsData.setAreaName(dataMap.get("areaName"));
logisticsDataList.add(logisticsData);
}
ResponseData responseData = new ResponseData();
responseData.setMessage((String) jsonObject.get("message"));
responseData.setState(Integer.parseInt((String) jsonObject.get("state")));
responseData.setCondition((String) jsonObject.get("condition"));
responseData.setIscheck(Integer.parseInt((String) jsonObject.get("ischeck")));
responseData.setCom((String) jsonObject.get("com"));
responseData.setNu((String) jsonObject.get("nu"));
responseData.setData(logisticsDataList);
responseData.setJsonResult(responseJson);
return responseData;
}
/**
* @param params
* @return
* @方法描述 发送实时查询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();
}
}
返回的在实体类:
private String message; //消息体
private Integer state;//签收状态 0在途中、1已揽收、2疑难、3已签收、4退签、5同城派送中、6退回、7转单
private String condition; //快递单明细状态标记,暂未实现
private Integer ischeck;//是否签收
private String com;//快递公司编码
private String nu;//快递单号
private List<LogisticsData> data;//物流信息列表
private String jsonResult; //返回的原json
最终测试结果:
String key = "这里填注册的key";
String customer = "这里填注册的客户代码";
String com = "yuantong"; //快递公司编码
String num = "88888888888888888"; //快递单号
String phone = ""; //手机号码后四位
String from = ""; //出发地
String to = ""; //目的地
int resultv2 = 0; //开启行政规划解析
SynQuery demo = new SynQuery(key, customer);
String result = demo.synQueryData(com, num, phone, from, to, resultv2);
System.out.println(result);