快递100快递查询接口示例

611 阅读2分钟

复制以下代码就可以直接用

接口工具类:

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);