常用快遞電子面單接口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)、單號申請:部分快遞需提前申請單號

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

0

增值服務名稱

Value

String

0

增值服務值

CustomerID

String

0

客戶標識(選填)

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      返回結果參數

同步返回

參數名稱

類型

必須要求

說明

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

0

寄件人安全電話

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;

    }

 

}

  


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM