2023年12月15日发(作者:)

常用快递单号物流查询接口通用API(JAVA对接)

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

快递API的应用场景与用途

最常见的应用场景如下:

(1)电商网站:例如B2C,团购,B2B,批发分销站,C2C,本地生活交易等网站。

(2)管理系统:订单处理平台,调度平台,发货平台,分销系统,渠道管理系统,客户管理系统,ERP等。

快递API的用途如下:

(1)让顾客登录网站后,直接在“我的订单”页面上可以看到订单的物流状态。

(2)自动筛选出“已签收”,“疑难件”等状态的单号,减轻物流跟单人员的压力。

(3)更改订单的状态和交易流程,例如单号变为“已签收”,可以让订单转化可以确认退换货等。

(4)评估选择快递公司,根据“已签收”的运单数,可以算出销售人员的业绩,并进行应对的结算。

(5)邮件,短信提醒用户运单的最新状态,可以安抚用户,也可以利用邮件短信二次营销。

对接要求:

(1),查询接口支持遵循运输单号查询(个别查询,并发不超过10个/ S)。

(2),指定的物流运输单号选择相应的快递公司编码,格式不对或则编码错误都会返回失败的信息。例如EMS物流单号应选择快递公司编码(EMS)

(3),返回的物流跟踪信息遵循发生的时间升序排列。

(4),接口指令1002

(5),接口提供:快递鸟

(6),请求地址:http://

java请求示例:

1import edReader;

import ption;

2 import treamReader;

3 import StreamWriter;

4 import ortedEncodingException;

5 import LConnection;

6 import ;

7 import oder;

8 import eDigest;

9 import p;

10 import ;

11 /**

12 *

13

* 单日超过500单查询量,建议接入物流轨迹订阅推送接口

14 *

15 */

16 public class KdniaoTrackQueryAPI {

17

18 //DEMO

19 public static void main(String[] args) {

20 KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();

21 try {

22 String result = erTracesByJson("ANE", "21");

23 (result);

24

25 } catch (Exception e) {

26 tackTrace();

27 }

28 }

29

30

//电商ID

31

private String EBusinessID="申请";

32

//电商加密私钥,注意保管,不要泄漏

33

private String AppKey="申请";

34

//请求url

35 private String ReqURL="/Ebusiness/";

36

37 /**

38

* Json方式 查询订单物流轨迹

39 * @throws Exception

40 */

41 public String getOrderTracesByJson(String expCode, String expNo) throws Exception{

42 String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";

43

44 Map params = new HashMap();

45 ("RequestData", urlEncoder(requestData, "UTF-8"));

46 ("EBusinessID", EBusinessID);

47 ("RequestType", "1002");

48 String dataSign=encrypt(requestData, AppKey, "UTF-8");

49 ("DataSign", urlEncoder(dataSign, "UTF-8"));

50 ("DataType", "2");

51

52 String result=sendPost(ReqURL, params);

53

54

//根据公司业务处理返回的信息......

55

56 return result;

57 }

58

59 /**

60

* MD5加密

61

* @param str 内容

62

* @param charset 编码方式

63 * @throws Exception

64 */

65 @SuppressWarnings("unused")

66 private String MD5(String str, String charset) throws Exception {

67 MessageDigest md = tance("MD5");

68 (es(charset));

69 byte[] result = ();

70 StringBuffer sb = new StringBuffer(32);

71 for (int i = 0; i < ; i++) {

72 int val = result[i] & 0xff;

73 if (val <= 0xf) {

74 ("0");

75 }

76 (tring(val));

77 }

78 return ng().toLowerCase();

79 }

80

81 /**

82

* base64编码

83

* @param str 内容

84

* @param charset 编码方式

85 * @throws UnsupportedEncodingException

86 */

87 private String base64(String str, String charset) throws UnsupportedEncodingException{

88 String encoded = base64Encode(es(charset));

89 return encoded;

90 }

91

92 @SuppressWarnings("unused")

93 private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{

94 String result = (str, charset);

95 return result;

96 }

97

98 /**

99

* 电商Sign签名生成

100

* @param content 内容

101 * @param keyValue Appkey

102

* @param charset 编码方式

103 * @throws UnsupportedEncodingException ,Exception

104

* @return DataSign签名

105 */

106 @SuppressWarnings("unused")

107 private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingExceptio108 n, Exception

109 {

110 if (keyValue != null)

111 {

112 return base64(MD5(content + keyValue, charset), charset);

113 }

114 return base64(MD5(content, charset), charset);

115 }

116

117 /**

118

* 向指定 URL 发送POST方法的请求

119

* @param url 发送请求的 URL

120

* @param params 请求的参数集合

121

* @return 远程资源的响应结果

122 */

123 @SuppressWarnings("unused")

124 private String sendPost(String url, Map params) {

125 OutputStreamWriter out = null;

126 BufferedReader in = null;

127 StringBuilder result = new StringBuilder();

128 try {

129 URL realUrl = new URL(url);

130 HttpURLConnection conn =(HttpURLConnection) nnection();

131

// 发送POST请求必须设置如下两行

132 utput(true);

133 nput(true);

134

// POST方法

135 uestMethod("POST");

136

// 设置通用的请求属性

137 uestProperty("accept", "*/*");

138 uestProperty("connection", "Keep-Alive");

139 uestProperty("user-agent",

140 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

141 uestProperty("Content-Type", "application/x-www-form-urlencoded");

142 t();

143

// 获取URLConnection对象对应的输出流

144 out = new OutputStreamWriter(putStream(), "UTF-8");

145

// 发送请求参数

146 if (params != null) {

147 StringBuilder param = new StringBuilder();

148 for ( entry : et()) {

149 if(()>0){

150 ("&");

151 }

152 (());

153 ("=");

154 (ue());

155 //n(()+":"+ue());

156 }

157 //n("param:"+ng());

158 (ng());

159 }

160

// flush输出流的缓冲

161 ();

162

// 定义BufferedReader输入流来读取URL的响应

163 in = new BufferedReader(

164 new InputStreamReader(utStream(), "UTF-8"));

165 String line;

166 while ((line = ne()) != null) {

167 (line);

168 }

169 } catch (Exception e) {

170 tackTrace();

171 }

172

//使用finally块来关闭输出流、输入流

173 finally{

174 try{

175 if(out!=null){

176 ();

177 }

178 if(in!=null){

179 ();

180 }

181 }

182 catch(IOException ex){

183 tackTrace();

184 }

185 }

186 return ng();

187 }

188

189

190 private static char[] base64EncodeChars = new char[] {

191 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',

192 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',

193 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',

194 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',

195 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',

196 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',

197 'w', 'x', 'y', 'z', '0', '1', '2', '3',

198 '4', '5', '6', '7', '8', '9', '+', '/' };

199

200 public static String base64Encode(byte[] data) {

201 StringBuffer sb = new StringBuffer();

202 int len = ;

203 int i = 0;

204 int b1, b2, b3;

205 while (i < len) {

206 b1 = data[i++] & 0xff;

207 if (i == len)

208 {

209 (base64EncodeChars[b1 >>> 2]);

210 (base64EncodeChars[(b1 & 0x3) << 4]);

211 ("==");

212 break;

213 }

214 b2 = data[i++] & 0xff;

215 if (i == len)

216 {

217 (base64EncodeChars[b1 >>> 2]);

218 (base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);

219 (base64EncodeChars[(b2 & 0x0f) << 2]);

220 ("=");

221 break;

222 }

223 b3 = data[i++] & 0xff;

224 (base64EncodeChars[b1 >>> 2]);

225 (base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);

226 (base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);

227 (base64EncodeChars[b3 & 0x3f]);

228 }

229 return ng();

230 }

231 }