天天看點

常用快遞電子面單接口API對接方法 - 簡幽

常用快遞電子面單接口API對接方法

快遞電子面單接口API比較常用在電商、倉儲系統和ERP系統,對接後不用下載下傳安裝軟體,可以直接嵌入系統網站調用。

目前有快遞鳥和菜鳥提供內建的電子面單列印接口,分别支援20,15家快遞的電子面單列印

1.1      接口

(1)、訂單編号(OrderCode)不可重複送出,重複送出系統會傳回具體錯誤代碼。

(2)、支援常用20家快遞電子面單列印。

(3)、測試位址:http://testapi.kdniao.cc:8081/api/eorderservice/

(4)、正式位址:http://api.kdniao.cc/api/EOrderService

(5)、接口申請:快遞鳥網站新增賬號申請接口

(6)、單号申請:部分快遞需提前申請單号

常用快遞電子面單接口API對接方法 - 簡幽

1.2      系統級和應用級輸入參數

系統級輸入參數 應用級輸入參數 類型 是否必須 描述
RequestData(必填參數,請求内容,JSON格式,須和DataType一緻) CallBack String O 使用者自定義回調資訊
MemberID String O

會員辨別

平台方與快遞鳥統一使用者辨別的商家ID

CustomerName String O

電子面單客戶賬号

(與快遞網點申請或通過快遞鳥官網申請或通過申請電子面單客戶号申請)

CustomerPwd String O 電子面單密碼
SendSite String O 收件網點辨別
ShipperCode String R 快遞公司編碼
LogisticCode String O 快遞單号
ThrOrderCode String O 第三方訂單号
OrderCode String R 訂單編号
MonthCode String C 月結編碼
PayType Int R

郵費支付方式:

1-現付,2-到付,3-月結,4-第三方支付

ExpType String R 快遞類型:1-标準快件
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 收件區(如福田區,不要缺少“區”或“縣”)
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 O

上門取貨時間段:

"yyyy-MM-dd HH:mm:ss"格式化,本文中所有時間格式相同

EndDate String O
Weight Double O 物品總重量kg
Quantity Int O 件數/包裹數
Volume Double O 物品總體積m3
Remark String O 備注
AddService Name String 增值服務名稱
Value String 增值服務值
CustomerID String 客戶辨別(選填)
Commodity GoodsName String R 商品名稱
GoodsCode String O 商品編碼
Goodsquantity Int O 件數
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 資料内容簽名
DataType String R 請求、傳回資料類型: 2-json

1.3      傳回結果參數

l  同步傳回

參數名稱 類型 必須要求 說明
EBusinessID String R 電商使用者ID
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 O 訂單預計到貨時間yyyy-mm-dd
Callback String O 使用者自定義回調資訊
SubCount Int O 子單數量
SubOrders String O 子單号
SubPrintTemplates String O 子單模闆
ReceiverSafePhone String O 收件人安全電話
SenderSafePhone String 寄件人安全電話
DialPage String R 撥号頁面網址(轉換成二維碼可掃描撥号)

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 EBusinessID

    final String AppKey = ""; //kdniao.com AppKey

    final Integer IsPreview = 0; //是否預覽 0-不預覽 1-預覽

 

    /**

     * @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 stub

        response.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;

    }

 

}
      

  

常用快遞電子面單接口API對接方法 - 簡幽