快递鸟接口对接----查询物流信息

个人对接快递鸟后分享心得

主要功能:java开发对接快递鸟,根据用户输入的订单号,实现查询物流信息的功能。

对接快递鸟的util

public class KdniaoTrackQueryAPI {

private String EBusinessID = "对应的你的电商id";
private String AppKey = "快递鸟提供给你的私钥";
// 请求的url    http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx
private String ReqURL = "请求的url";

/**
 * Json方式 查询订单物流轨迹
 * 
 * @throws Exception
 */
 //参数1:expNo快递单号
 //参数2:expCode快递公司编号
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加密
 * 
 * @param str
 *            内容
 * @param charset
 *            编码方式
 * @throws Exception
 */
@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编码
 * 
 * @param str
 *            内容
 * @param charset
 *            编码方式
 * @throws UnsupportedEncodingException
 */
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签名生成
 * 
 * @param content
 *            内容
 * @param keyValue
 *            Appkey
 * @param charset
 *            编码方式
 * @throws UnsupportedEncodingException
 *             ,Exception
 * @return DataSign签名
 */
@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);
}

/**
 * 向指定 URL 发送POST方法的请求
 * 
 * @param url
 *            发送请求的 URL
 * @param params
 *            请求的参数集合
 * @return 远程资源的响应结果
 */
@SuppressWarnings("unused")
private String sendPost(String url, Map<String, String> params) {
	OutputStreamWriter out = null;
	BufferedReader in = null;
	StringBuilder result = new StringBuilder();
	try {
		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();
	
    // main方法测试
   public static void main(String[] args) {
	try {
			KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();
			String orderTracesByJson = api.getOrderTracesByJson("快递公司的编号", "快递的订单号");
			String aString = "[" + orderTracesByJson + "]";
			List<Map> list = JSONObject.parseArray(aString, Map.class);//解析json字符串处理数据
			List<Map> list1 = (List<Map>) list.get(0).get("Traces");
			} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			}
     	}
}

以上就是个人对接快递鸟后的分享心得,以及工具类的分享,如果有问题欢迎大家留言

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值