资讯专栏INFORMATION COLUMN

快递查询接口通用API(JAVA对接)

pepperwang / 2690人阅读

摘要:快递查询接口通用是给发货电商用来实现查询快递物流轨迹功能的,接口对接前要先到快递鸟网站申请接口秘钥和对接要求查询接口支持按照运单号查询单个查询,并发不超过个。

快递查询接口通用API是给发货电商用来实现查询快递物流轨迹功能的,接口对接前要先到快递鸟网站申请接口秘钥和APIKEY

对接要求:
(1)、查询接口支持按照运单号查询(单个查询,并发不超过10个/S)。
(2)、指定的物流运单号选择相应的快递公司编码,格式不对或则编码错误都会返失败的信息。如EMS物流单号应选择快递公司编码(EMS)
(3)、返回的物流跟踪信息按照发生的时间升序排列。
(4)、接口指令1002
(5)、接口提供:快递鸟
(6)、请求地址:http://api.kdniao.cc/Ebusines...

</>复制代码

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStreamWriter;
  5. import java.io.UnsupportedEncodingException;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.net.URLEncoder;
  9. import java.security.MessageDigest;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. /**
  13. *
  14. * 单日超过500单查询量,建议接入物流轨迹订阅推送接口
  15. *
  16. */
  17. public class KdniaoTrackQueryAPI {
  18. //DEMO
  19. public static void main(String[] args) {
  20. KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();
  21. try {
  22. String result = api.getOrderTracesByJson("ANE", "210001633605");
  23. System.out.print(result);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. //电商ID
  29. private String EBusinessID="申请";
  30. //电商加密私钥,注意保管,不要泄漏
  31. private String AppKey="申请";
  32. //请求url
  33. private String ReqURL="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";
  34. /**
  35. * Json方式 查询订单物流轨迹
  36. * @throws Exception
  37. */
  38. public String getOrderTracesByJson(String expCode, String expNo) throws Exception{
  39. String requestData= "{"OrderCode":"","ShipperCode":"" + expCode + "","LogisticCode":"" + expNo + ""}";
  40. Map params = new HashMap();
  41. params.put("RequestData", urlEncoder(requestData, "UTF-8"));
  42. params.put("EBusinessID", EBusinessID);
  43. params.put("RequestType", "1002");
  44. String dataSign=encrypt(requestData, AppKey, "UTF-8");
  45. params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
  46. params.put("DataType", "2");
  47. String result=sendPost(ReqURL, params);
  48. //根据公司业务处理返回的信息......
  49. return result;
  50. }
  51. /**
  52. * MD5加密
  53. * @param str 内容
  54. * @param charset 编码方式
  55. * @throws Exception
  56. */
  57. @SuppressWarnings("unused")
  58. private String MD5(String str, String charset) throws Exception {
  59. MessageDigest md = MessageDigest.getInstance("MD5");
  60. md.update(str.getBytes(charset));
  61. byte[] result = md.digest();
  62. StringBuffer sb = new StringBuffer(32);
  63. for (int i = 0; i < result.length; i++) {
  64. int val = result[i] & 0xff;
  65. if (val <= 0xf) {
  66. sb.append("0");
  67. }
  68. sb.append(Integer.toHexString(val));
  69. }
  70. return sb.toString().toLowerCase();
  71. }
  72. /**
  73. * base64编码
  74. * @param str 内容
  75. * @param charset 编码方式
  76. * @throws UnsupportedEncodingException
  77. */
  78. private String base64(String str, String charset) throws UnsupportedEncodingException{
  79. String encoded = base64Encode(str.getBytes(charset));
  80. return encoded;
  81. }
  82. @SuppressWarnings("unused")
  83. private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
  84. String result = URLEncoder.encode(str, charset);
  85. return result;
  86. }
  87. /**
  88. * 电商Sign签名生成
  89. * @param content 内容
  90. * @param keyValue Appkey
  91. * @param charset 编码方式
  92. * @throws UnsupportedEncodingException ,Exception
  93. * @return DataSign签名
  94. */
  95. @SuppressWarnings("unused")
  96. private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception
  97. {
  98. if (keyValue != null)
  99. {
  100. return base64(MD5(content + keyValue, charset), charset);
  101. }
  102. return base64(MD5(content, charset), charset);
  103. }
  104. /**
  105. * 向指定 URL 发送POST方法的请求
  106. * @param url 发送请求的 URL
  107. * @param params 请求的参数集合
  108. * @return 远程资源的响应结果
  109. */
  110. @SuppressWarnings("unused")
  111. private String sendPost(String url, Map params) {
  112. OutputStreamWriter out = null;
  113. BufferedReader in = null;
  114. StringBuilder result = new StringBuilder();
  115. try {
  116. URL realUrl = new URL(url);
  117. HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
  118. // 发送POST请求必须设置如下两行
  119. conn.setDoOutput(true);
  120. conn.setDoInput(true);
  121. // POST方法
  122. conn.setRequestMethod("POST");
  123. // 设置通用的请求属性
  124. conn.setRequestProperty("accept", "*/*");
  125. conn.setRequestProperty("connection", "Keep-Alive");
  126. conn.setRequestProperty("user-agent",
  127. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  128. conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  129. conn.connect();
  130. // 获取URLConnection对象对应的输出流
  131. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  132. // 发送请求参数
  133. if (params != null) {
  134. StringBuilder param = new StringBuilder();
  135. for (Map.Entry entry : params.entrySet()) {
  136. if(param.length()>0){
  137. param.append("&");
  138. }
  139. param.append(entry.getKey());
  140. param.append("=");
  141. param.append(entry.getValue());
  142. //System.out.println(entry.getKey()+":"+entry.getValue());
  143. }
  144. //System.out.println("param:"+param.toString());
  145. out.write(param.toString());
  146. }
  147. // flush输出流的缓冲
  148. out.flush();
  149. // 定义BufferedReader输入流来读取URL的响应
  150. in = new BufferedReader(
  151. new InputStreamReader(conn.getInputStream(), "UTF-8"));
  152. String line;
  153. while ((line = in.readLine()) != null) {
  154. result.append(line);
  155. }
  156. } catch (Exception e) {
  157. e.printStackTrace();
  158. }
  159. //使用finally块来关闭输出流、输入流
  160. finally{
  161. try{
  162. if(out!=null){
  163. out.close();
  164. }
  165. if(in!=null){
  166. in.close();
  167. }
  168. }
  169. catch(IOException ex){
  170. ex.printStackTrace();
  171. }
  172. }
  173. return result.toString();
  174. }
  175. private static char[] base64EncodeChars = new char[] {
  176. "A", "B", "C", "D", "E", "F", "G", "H",
  177. "I", "J", "K", "L", "M", "N", "O", "P",
  178. "Q", "R", "S", "T", "U", "V", "W", "X",
  179. "Y", "Z", "a", "b", "c", "d", "e", "f",
  180. "g", "h", "i", "j", "k", "l", "m", "n",
  181. "o", "p", "q", "r", "s", "t", "u", "v",
  182. "w", "x", "y", "z", "0", "1", "2", "3",
  183. "4", "5", "6", "7", "8", "9", "+", "/" };
  184. public static String base64Encode(byte[] data) {
  185. StringBuffer sb = new StringBuffer();
  186. int len = data.length;
  187. int i = 0;
  188. int b1, b2, b3;
  189. while (i < len) {
  190. b1 = data[i++] & 0xff;
  191. if (i == len)
  192. {
  193. sb.append(base64EncodeChars[b1 >>> 2]);
  194. sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
  195. sb.append("==");
  196. break;
  197. }
  198. b2 = data[i++] & 0xff;
  199. if (i == len)
  200. {
  201. sb.append(base64EncodeChars[b1 >>> 2]);
  202. sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
  203. sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
  204. sb.append("=");
  205. break;
  206. }
  207. b3 = data[i++] & 0xff;
  208. sb.append(base64EncodeChars[b1 >>> 2]);
  209. sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
  210. sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
  211. sb.append(base64EncodeChars[b3 & 0x3f]);
  212. }
  213. return sb.toString();
  214. }
  215. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68056.html

相关文章

  • 顺丰快递单号查询api接口免费对接参数以及demo

    摘要:快递鸟目前已经入驻了顺丰第三方软件服务平台,对接起来非常方便。如顺丰物流单号应选择快递公司编码接口来源快递鸟返回的物流跟踪信息按照发生的时间升序排列。 showImg(https://segmentfault.com/img/bVbwklp?w=1005&h=351); 顺丰快递对物流信息的管控较为严格,官网上也加上了由腾讯云提供的滑动验证码进行保护,如果需要大批量查询顺丰的物流信息,...

    zlyBear 评论0 收藏0
  • 免费物流快递查询API接口快速对接攻略(中通、申通、顺丰、韵达)

    摘要:快递查询接口是使用的物流单号即可实现查询物流信息。目前快递查询接口有两种实现方式,一种是主动查询,一种是订阅接口推送数据。另外,快递鸟还有在途监控电子面单等其他的接口方案,可以根据公司需求来选择。 快递查询API接口是使用的物流单号即可实现查询物流信息。主要应用在电商商城、ERP系统商、WMS系统商、快递柜、银行等企业。多家快递物流公司接口统一接入,建议对接接口提供商,一次性可以接入多...

    summerpxy 评论0 收藏0

发表评论

0条评论

pepperwang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<