常用快递电子面单接口API对接方法
快遞電子面單接口API比較常用在電商、倉儲系統(tǒng)和ERP系統(tǒng),對接后不用下載安裝軟件,可以直接嵌入系統(tǒng)網(wǎng)站調(diào)用。
目前有快遞鳥和菜鳥提供集成的電子面單打印接口,分別支持20,15家快遞的電子面單打印
1.1????? 接口
(1)、訂單編號(OrderCode)不可重復(fù)提交,重復(fù)提交系統(tǒng)會返回具體錯誤代碼。
(2)、支持常用20家快遞電子面單打印。
(3)、測試地址:http://testapi.kdniao.cc:8081/api/eorderservice/
(4)、正式地址:http://api.kdniao.cc/api/EOrderService
(5)、接口申請:快遞鳥網(wǎng)站注冊賬號申請接口
(6)、單號申請:部分快遞需提前申請單號
1.2????? 系統(tǒng)級和應(yīng)用級輸入?yún)?shù)
| 系統(tǒng)級輸入?yún)?shù) | 應(yīng)用級輸入?yún)?shù) | 類型 | 是否必須 | 描述 | ||
| RequestData(必填參數(shù),請求內(nèi)容,JSON格式,須和DataType一致) | CallBack | String | O | 用戶自定義回調(diào)信息 | ||
| MemberID | String | O | 會員標(biāo)識 平臺方與快遞鳥統(tǒng)一用戶標(biāo)識的商家ID | |||
| CustomerName | String | O | 電子面單客戶賬號 (與快遞網(wǎng)點申請或通過快遞鳥官網(wǎng)申請或通過申請電子面單客戶號申請) | |||
| CustomerPwd | String | O | 電子面單密碼 | |||
| SendSite | String | O | 收件網(wǎng)點標(biāo)識 | |||
| ShipperCode | String | R | 快遞公司編碼 | |||
| LogisticCode | String | O | 快遞單號 | |||
| ThrOrderCode | String | O | 第三方訂單號 | |||
| OrderCode | String | R | 訂單編號 | |||
| MonthCode | String | C | 月結(jié)編碼 | |||
| PayType | Int | R | 郵費支付方式: 1-現(xiàn)付,2-到付,3-月結(jié),4-第三方支付 | |||
| ExpType | String | R | 快遞類型:1-標(biāo)準(zhǔn)快件 | |||
| IsNotice | Int | O | 是否通知快遞員上門攬件:0-通知;1-不通知;不填則默認為1 | |||
| 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 | 收件區(qū)(如福田區(qū),不要缺少“區(qū)”或“縣”) | |||
| Address | String | R | 收件人詳細地址 | |||
| Sender | Company | String | O | 發(fā)件人公司 | ||
| Name | String | R | 發(fā)件人 | |||
| Tel | String | R | 電話與手機,必填一個 | |||
| Mobile | String | |||||
| ? | PostCode | String | O | 發(fā)件人郵編 | ||
| ProvinceName | String | R | 發(fā)件省(如廣東省,不要缺少“省”) | |||
| CityName | String | R | 發(fā)件市(如深圳市,不要缺少“市”) | |||
| ExpAreaName | String | O | 發(fā)件區(qū)(如福田區(qū),不要缺少“區(qū)”或“縣”) | |||
| Address | String | R | 發(fā)件詳細地址 | |||
| StartDate | String | O | 上門取貨時間段: "yyyy-MM-dd HH:mm:ss"格式化,本文中所有時間格式相同 | |||
| EndDate | String | O | ||||
| Weight | Double | O | 物品總重量kg | |||
| Quantity | Int | O | 件數(shù)/包裹數(shù) | |||
| Volume | Double | O | 物品總體積m3 | |||
| Remark | String | O | 備注 | |||
| AddService | Name | String | 0 | 增值服務(wù)名稱 | ||
| Value | String | 0 | 增值服務(wù)值 | |||
| CustomerID | String | 0 | 客戶標(biāo)識(選填) | |||
| Commodity | GoodsName | String | R | 商品名稱 | ||
| GoodsCode | String | O | 商品編碼 | |||
| Goodsquantity | Int | O | 件數(shù) | |||
| GoodsPrice | Double | O | 商品價格 | |||
| GoodsWeight | Double | O | 商品重量kg | |||
| GoodsDesc | String | O | 商品描述 | |||
| GoodsVol | Double | O | 商品體積m3 | |||
| IsReturnPrintTemplate | String | O | 返回電子面單模板: 0-不需要;1-需要 | |||
| ? | IsSendMessage | Int | O | 是否訂閱短信 0-不需要;1-需要 | ||
| ? | TemplateSize | String | O | 模板尺寸 | ||
| EBusinessID | ? | String | R | 商戶ID | ||
| RequestType | String | R | 請求指令類型:1007 | |||
| DataSign | String | R | 數(shù)據(jù)內(nèi)容簽名 | |||
| DataType | String | R | 請求、返回數(shù)據(jù)類型: 2-json | |||
| ? | ? | ? | ? | ? | ? | ? |
?
1.3????? 返回結(jié)果參數(shù)
l? 同步返回
| 參數(shù)名稱 | 類型 | 必須要求 | 說明 | |
| EBusinessID | String | R | 電商用戶ID | |
| Order | OrderCode | String | R | 訂單編號 |
| ShipperCode | String | R | 快遞公司編碼 | |
| LogisticCode | String | R | 快遞單號 | |
| MarkDestination | String | O | 大頭筆 | |
| OriginCode | String | O | 始發(fā)地區(qū)域編碼 | |
| OriginName | String | O | 始發(fā)地/始發(fā)網(wǎng)點 | |
| DestinatioCode | String | O | 目的地區(qū)域編碼 | |
| DestinatioName | String | O | 目的地/到達網(wǎng)點 | |
| SortingCode | String | O | 分揀編碼 | |
| PackageCode | String | O | 集包編碼 | |
| Success | Bool | R | 成功與否 | |
| ResultCode | String | R | 錯誤編碼 | |
| Reason | String | O | 失敗原因 | |
| UniquerRequestNumber | String | R | 唯一標(biāo)識 | |
| PrintTemplate | String | O | 面單打印模板 | |
| EstimatedDeliveryTime | String | O | 訂單預(yù)計到貨時間yyyy-mm-dd | |
| Callback | String | O | 用戶自定義回調(diào)信息 | |
| SubCount | Int | O | 子單數(shù)量 | |
| SubOrders | String | O | 子單號 | |
| SubPrintTemplates | String | O | 子單模板 | |
| ReceiverSafePhone | String | O | 收件人安全電話 | |
| SenderSafePhone | String | 0 | 寄件人安全電話 | |
| DialPage | String | R | 撥號頁面網(wǎng)址(轉(zhuǎn)換成二維碼可掃描撥號) | |
?
?
2 ? ? ? ?批量打印接口對接demo
package cc.kdniao.api;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.security.MessageDigest;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.xml.internal.messaging.saaj.util.Base64;/*** Servlet implementation class printOrder*/@WebServlet("/printOrder")public class printOrder extends HttpServlet {private static final long serialVersionUID = 1L;final String EBussinessID = "";//kdniao.com EBusinessIDfinal String AppKey = ""; //kdniao.com AppKeyfinal Integer IsPreview = 0; //是否預(yù)覽 0-不預(yù)覽 1-預(yù)覽/*** @see HttpServlet#HttpServlet()*/public printOrder() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//response.getWriter().append("Served at: ").append(request.getContextPath());PrintWriter print = response.getWriter();String jsonResult = "";try {String ip = getIpAddress(request);jsonResult = getPrintParam(ip);} catch (Exception e) {//write log}print.println(jsonResult);print.flush();print.close();}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, UnsupportedEncodingException {// TODO Auto-generated method stubresponse.setContentType("");PrintWriter print = response.getWriter();String jsonResult = "";try {String ip = getIpAddress(request);jsonResult = getPrintParam(ip);} catch (Exception e) {//wirte log}print.println(jsonResult);print.flush();print.close();}/*** get print order param to json string* @return** @throws Exception*/private String getPrintParam(String ip) throws Exception {String data = "[{\"OrderCode\":\"234351215333113311353\",\"PortName\":\"SF\"},{\"OrderCode\":\"234351215333113311354\",\"PortName\":\"打印機名稱二\"}]";String result = "{\"RequestData\": \"" + URLEncoder.encode(data, "UTF-8") + "\", \"EBusinessID\":\"" + EBussinessID + "\", \"DataSign\":\"" + encrpy(ip + data, AppKey) + "\", \"IsPreview\":\""+ IsPreview + "\"}";return result;}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();}private String encrpy(String content, String key) throws UnsupportedEncodingException, Exception {String charset = "UTF-8";return new String(Base64.encode(md5(content + key, charset).getBytes(charset)));}/*** 獲取請求主機IP地址,如果通過代理進來,則透過防火墻獲取真實IP地址;* * @param request* @return* @throws IOException*/public final static String getIpAddress(HttpServletRequest request) throws IOException {// 獲取請求主機IP地址,如果通過代理進來,則透過防火墻獲取真實IP地址 String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_CLIENT_IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("HTTP_X_FORWARDED_FOR");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}} else if (ip.length() > 15) {String[] ips = ip.split(",");for (int index = 0; index < ips.length; index++) {String strIp = (String) ips[index];if (!("unknown".equalsIgnoreCase(strIp))) {ip = strIp;break;}}}return ip;}}
?
轉(zhuǎn)載于:https://www.cnblogs.com/jianyou/p/7875192.html
總結(jié)
以上是生活随笔為你收集整理的常用快递电子面单接口API对接方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 查看usb设备信息
- 下一篇: 关于7.0去掉Chrome后,平台默认浏