標籤:
快遞鳥是全球物流介面服務商,為電商 ERP、電商平台、倉儲、清關公司提供物流跟蹤、電子面單、智選物流、物流金融、線上下單等服務,解決電商的物流管理模組和金融模組。現就對快遞鳥電子面單API做基本描述,並提供電子面單介面的對接方式。
一.介面介紹
快遞鳥電子面單介面支援四通一達、順豐、EMS、宅急送、德邦、優速等15家國內常用快遞的面單列印。通過快遞鳥介面線上列印電子運單,即時產生運單號,無需錄單,提高發貨效率,提升送達時效。列印速度提升 4-6 倍、省去錄單環節、取消抽單環節、充當撿貨單、提升送達時效。
傳統面單VS電子面單:
對比項目 |
傳統面單 |
電子面單 |
出錯率 |
高 |
低 |
列印速度(張/分鐘) |
4~6 |
30~40 |
噪音 |
高 |
低 |
錄單成本 |
2~3 |
0 |
機器成本(元/台) |
800~1200 |
900~1000 |
面單資訊 |
字跡不清晰 |
標準化列印 |
是否需要回填單號 |
是 |
無需回填,系統產生運單號直接回填 |
現行電子面單VS快遞鳥電子面單
對比項目 |
現行電子面單 |
快遞鳥電子面單 |
單量要求(件/月) |
一般1000以上 |
0 |
月結帳號 |
需申請 |
無需帳號 |
是否需要提前買單號 |
部分快遞公司需要 |
使用時即時申請單號,無需提前購買 |
二.JAVA對接方式
(1)電子面單介面是快遞鳥提供給獨立電商、倉儲管理系統、物流供應鏈等物流系統平台使用的下單介面。
(2)為客戶解決線上發貨需求,商戶通過網路選擇快遞公司發送請求通知快遞公司有快遞要發貨。
(3) 客戶把資料通過此介面轉寄到快遞鳥,由快遞鳥為您安排快遞員上門取件的服務。
(4)訂單編號(OrderCode)不可重複提交,重複提交系統會返回具體錯誤碼。
(5)介面支援的訊息接收方式為HTTP POST,要求方法的編碼格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"。
(6)請求系統級參數說明:
參數名稱 |
類型 |
說明 |
必須要求 |
RequestData |
String |
請求內容需進行URL(utf-8)編碼。請求內容JSON格式,須和DataType一致。 |
R |
EBusinessID |
String |
商戶ID,請在我的服務頁面查看。 |
R |
RequestType |
String |
請求指令類型:1007 |
R |
DataSign |
String |
資料內容簽名:把(請求內容(未編碼)+AppKey)進行MD5加密,然後Base64編碼,最後進行URL(utf-8)編碼。詳細過程請查看Demo。 |
R |
DataType |
String |
請求、返回資料類型:只支援JSON格式 |
O |
備忘:R-必填(Required),O-可選(Optional),C-報文中該參數在一定條件下可選(Conditional)。
(7)介面地址:
API測試地址:http://testapi.kdniao.cc:8081/api/EOrderService
API正式地址:http://api.kdniao.cc/api/EOrderService
(8)請求內容欄位定義
參數名稱 |
類型 |
說明 |
是否必須 |
CallBack |
String |
使用者自訂回調資訊 |
O |
MemberID |
String |
會員標識 |
O |
CustomerName |
String |
電子面單客戶帳號(與快遞網點申請) |
O |
CustomerPwd |
String |
電子面單密碼 |
O |
SendSite |
String |
收件網點標識 |
O |
ShipperCode |
String |
快遞公司編碼 |
R |
LogisticCode |
String |
快遞單號 |
O |
OrderCode |
String |
訂單編號 |
R |
MonthCode |
String |
月結編碼 |
C |
PayType |
Int |
郵費支付方式:1-現付,2-到付,3-月結,4-第三方支付 |
R |
ExpType |
String |
快遞類型:1-標準快件 |
R |
IsNotice |
Int |
是否通知快遞員上門攬件:0-不通知;1-通知;不填則預設為1 |
O |
Cost |
Double |
寄件費(運費) |
O |
OtherCost |
Double |
其他費用 |
O |
Receiver |
Company |
String |
收件者公司 |
O |
Name |
String |
收件者 |
R |
Tel |
String |
電話與手機,必填一個 |
R |
Mobile |
String |
PostCode |
String |
收件者郵編 |
O |
ProvinceName |
String |
收件省(如廣東省,不要缺少“省”) |
R |
CityName |
String |
收件市(如深圳市,不要缺少“市”) |
R |
ExpAreaName |
String |
收件區(如福田區,不要缺少“區”或“縣”) |
O |
Address |
String |
收件者詳細地址 |
R |
Sender |
Company |
String |
寄件者公司 |
O |
Name |
String |
寄件者 |
R |
Tel |
String |
電話與手機,必填一個 |
R |
Mobile |
String |
PostCode |
String |
寄件者郵編 |
O |
ProvinceName |
String |
發件省(如廣東省,不要缺少“省”) |
R |
CityName |
String |
發件市(如深圳市,不要缺少“市”) |
R |
ExpAreaName |
String |
發件區(如福田區,不要缺少“區”或“縣”) |
O |
Address |
String |
寄件者詳細地址 |
R |
StartDate |
String |
上門取貨時間段:"yyyy-MM-dd HH:mm:ss"格式化,本文中所有時間格式相同 |
O |
EndDate |
String |
O |
Weight |
Double |
物品總重量kg |
O |
Quantity |
Int |
件數/包裹數 |
O |
Volume |
Double |
物品總體積m3 |
O |
Remark |
String |
備忘 |
O |
AddServices |
AddService |
Name |
String |
增值服務名稱 |
O |
Value |
String |
增值服務值 |
O |
CustomerID |
String |
客戶標識(選填) |
O |
Commoditys |
Commodity |
GoodsName |
String |
商品名稱 |
R |
GoodsCode |
String |
商品編碼 |
O |
Goodsquantity |
Int |
商品數量 |
O |
GoodsPrice |
Double |
商品價格 |
O |
GoodsWeight |
Double |
商品重量kg |
O |
GoodsDesc |
String |
商品描述 |
O |
GoodsVol |
Double |
商品體積m3 |
O |
IsReturnPrintTemplate |
String |
返回電子面單模板:0-不需要;1-需要 |
O |
(9)返回參數定義
參數名稱 |
類型 |
說明 |
必須要求 |
EBusinessID |
String |
使用者ID |
R |
Order |
OrderCode |
String |
訂單編號 |
R |
ShipperCode |
String |
快遞公司編碼 |
R |
LogisticCode |
String |
快遞單號 |
R |
MarkDestination |
String |
大頭筆 |
O |
OriginCode |
String |
始發地地區編碼 |
O |
OriginName |
String |
始發地/始髮網點 |
O |
DestinatioCode |
String |
目的地地區編碼 |
O |
DestinatioName |
String |
目的地/到達網點 |
O |
SortingCode |
String |
分揀編碼 |
O |
PackageCode |
String |
集包編碼 |
O |
Success |
Bool |
成功與否 |
R |
ResultCode |
String |
錯誤編碼 |
R |
Reason |
String |
失敗原因 |
O |
UniquerRequestNumber |
String |
唯一標識 |
R |
PrintTemplate |
String |
面單列印模板 |
O |
EstimatedDeliveryTime |
String |
訂單預計到貨時間yyyy-mm-dd |
O |
Callback |
String |
使用者自訂回調資訊 |
O |
(10)JAVA對接樣本
註:秘鑰需到快遞鳥官網申請
import java.io.BufferedReader;import java.io.IOException; import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;import java.security.MessageDigest; /** * * 快遞鳥電子面單介面 * * @技術QQ: 4009633321 * @技術QQ群: 200121393 * @see: http://www.kdniao.com/MiandanAPI.aspx * @copyright: 深圳市快金資料技術服務有限公司 * * ID和Key請到官網申請:http://www.kdniao.com/ServiceApply.aspx */ public class KdGoldAPIDemo {//電商IDprivate String EBusinessID="請到快遞鳥官網申請http://www.kdniao.com/ServiceApply.aspx";//電商加密私密金鑰,快遞鳥提供,注意保管,不要泄漏private String AppKey="請到快遞鳥官網申請http://www.kdniao.com/ServiceApply.aspx";//請求url, 正式環境地址:http://api.kdniao.cc/api/Eorderserviceprivate String ReqURL="http://testapi.kdniao.cc:8081/api/Eorderservice";/** * Json方式 電子面單 * @throws Exception */public String orderOnlineByJson() throws Exception{String requestData= "{'OrderCode': '012657700387'," + "'ShipperCode':'EMS'," + "'PayType':1," + "'ExpType':1," + "'Cost':1.0," + "'OtherCost':1.0," + "'Sender':" + "{" + "'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦區','Address':'明珠路73號'}," + "'Receiver':" + "{" + "'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝陽區','Address':'三裡屯街道雅秀大廈'}," + "'Commodity':" + "[{" + "'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}]," + "'Weight':1.0," + "'Quantity':1," + "'Volume':0.0," + "'Remark':'小心輕放'," + "'IsReturnPrintTemplate':1}";Map<String, String> params = new HashMap<String, String>();params.put("RequestData", urlEncoder(requestData, "UTF-8"));params.put("EBusinessID", EBusinessID);params.put("RequestType", "1007");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 = Base64.encode(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(); }}
電商ERP如何接入快遞鳥電子面單API?