快遞鳥作為全球最大的第三方物流接口服務商,電子面單可一次性對接33家主流快遞快運公司接口,永久免費,調用接口時快遞鳥會向物流公司請求單號,並實時返回,可直接打印電子面單發貨。
快遞鳥支持EMS(EMS)、順豐速運(SF)、郵政國內標快(YZBK)、郵政快遞包裹(YZPY)、宅急送(ZJS)、聯昊通速遞(LHT)、全一快遞(UAPEX)、申通快遞(STO)、德邦快遞(DBL)、京東快遞(JD)、信豐物流(XFEX)、天天快遞(HHTT)、速爾快遞(SURE)、跨越速運(KYSY)、品駿快遞(PJ)、承諾達(CND)、中通快遞(ZTO)、韻達速遞(YD)、百世快遞(HTKY)、圓通速遞(YTO)、遠成快運(YCWL)、優速快遞(UC)、安能快遞(ANE)、天地華宇(HOAU)、騰林物流(TLWL)、德邦快運(DBLKY)、安能快運(ANEKY)、京東快運(JDKY)、龍邦快運(LB)、百世快運(HTKYKY)、中通快運(ZTOKY)、佳吉快運(CNEX)、韻達快運(YDKY)、順心捷達(SX)電子面單接口。
1.登陸上述快遞鳥網址進行注冊獲取ID與Key.——實名認證——開通需要的會員服務(電子面單)
批量打印:
開發對接前要下載技術說明文檔(快遞物流api接口文檔下載_電子面單接口文檔-快遞鳥code接口文檔),接口開發可以下載電子面單接口DEMO(快遞鳥「即時查詢DEMO」讓對接更簡單)進行參考,快遞公司對應的編碼可以下載“快遞公司編碼列表文檔”“電子面單客戶號參數對照表”“快遞公司快遞業務類型”進行查看
使用電子面單接口還需要電子面單賬號獲取單號,每家快遞公司電子面單賬號需要傳的字段不同,詳情參考“電子面單客戶號參數對照表”,電子面單獲取單號需要在快遞鳥官網注冊賬號,可以在線申請部分快遞公司電子面單客戶號,不支持的可以線下聯系當地網點申請,申請到后,需聯系網點預先充值單號,通過快遞鳥電子面單API下單即可獲取到快遞單號和大頭筆信息
使用電子面單接口還需要電子面單賬號,測試環境:必須使用快遞鳥提供的測試賬號,在快遞鳥官網-幫助與文檔下載,“快遞鳥電子面單參數配置對照表”查看相應賬號和接口請求對應的字段名;
正式環境:
無需電子面單賬號直接下單:順豐,EMS(廣東省內發全國),宅急送,快捷,郵政快遞包裹、中鐵快運、全一快遞;
線上(快遞鳥后台)申請賬號:優速、中通、韻達、圓通、遠成快運、安能、百世;
(申請路徑:快遞鳥官網—電子面單—我的快遞公司—申請新的快遞公司);
其他的快遞公司您需要和當地的快遞網點線下申請賬號(預存單號)才可以使用。
接入過程中如有疑問可以加技術支持qq群進行咨詢,具體對接文檔在QQ群文件可以下載,開發完成后在測試環境測試,測試環境只是提供給用戶調通接口使用,每家快遞公司邏輯相同,測通一家快遞公司說明接口已調通,正式環境下,有些快遞公司無需電子面單賬號直接下單打單,有些快遞公司需要在快遞鳥后台申請賬號,有的快遞公司您需要和當地的快遞網點線下申請賬號(預存單號)才可以使用。電子面單批量打印是可下載電子面單批量打印demo(快遞鳥官網打印控件下載_雲打印控件_電子面單打印控件_web打印控)進行參考。
對接中要注意:(1)確保接口中電商ID、密鑰(AppKey)與用戶管理后台的商戶ID、密鑰完全一致。(2)OrderCode必須是快遞鳥電子面單下單接口正式環境下單的訂單號;PortName是打印機名稱,必須與本地打印機名稱一致。(3)確保接口demo中GetIp()方法獲取到的IP和用戶連接打印機的電腦IP一致。(4)安裝快遞鳥打印控件C-Lodop (Print),調用快遞鳥批量打印demo后會提示下載或在快遞鳥網站下載。
最后發布上線,這就對接成功可以使用啦。電子面單接口調用成功后接口會直接返回HTML電子面單模板,可以直接使用瀏覽器打印,或者使用HTML控件進行打印。
批量打印的流程:
1、先調用電子面單打印接口獲得必須字段:OrderCode(訂單號)
2、拼接組合打印的數據data:格式json_encode([0=>['OrderCode' => '訂單號1', 'PortName' => '打印機名稱']]);
3、簽名
所需參數:
(1)、第二部拼接好的data,如下圖:
打印的數據
(2)、連接打印機的主機外網ip
(3)、用戶申請的快遞鳥的APIKey
注意:(2)、(3)結合方式:ip . data 生產新的data,並用簽名函數生成簽名,如下圖
簽名代碼如下:
以上流程,官方給的demo中都有,主要需要注意的點是如果快遞鳥批量打印接口中返回錯誤總是提示 數據驗證不通過 的話,需要注意的是客戶端ip地址的獲取,簽名的數據拼接及表單數據的拼接方式,用戶的appkey和商戶ID是否正確等等;
以下是需要注意的點
一、連接打印機的ip獲取是否有誤?
(1)如果是在本地做測試,那么官方提供的獲取本機ip地址是不行的,需要使用一下代碼:
獲取本機外網ip
(2)若是正式環境的話,則直接用官方demo就可以了,代碼如下:
<?php /** * * 快遞鳥電子面單接口 * * @技術QQ: 4009633321 * @技術QQ群: 200121393 * @see: http://www.kdniao.com/MiandanAPI.aspx * @copyright: 深圳市快金數據技術服務有限公司 * * ID和Key請到官網申請:http://www.kdniao.com/ServiceApply.aspx */ //電商ID defined('EBusinessID') or define('EBusinessID', '請到快遞鳥官網申請http://www.kdniao.com/ServiceApply.aspx'); //電商加密私鑰,快遞鳥提供,注意保管,不要泄漏 defined('AppKey') or define('AppKey', '請到快遞鳥官網申請http://www.kdniao.com/ServiceApply.aspx'); //請求url,接口正式地址:http://api.kdniao.cc/api/Eorderservice defined('ReqURL') or define('ReqURL', 'http://testapi.kdniao.cc:8081/api/Eorderservice'); //調用獲取物流軌跡 //------------------------------------------------------------- //構造電子面單提交信息 $eorder = []; $eorder["ShipperCode"] = "SF"; $eorder["OrderCode"] = "PM201604062341"; $eorder["PayType"] = 1; $eorder["ExpType"] = 1; $sender = []; $sender["Name"] = "李先生"; $sender["Mobile"] = "18888888888"; $sender["ProvinceName"] = "李先生"; $sender["CityName"] = "深圳市"; $sender["ExpAreaName"] = "福田區"; $sender["Address"] = "賽格廣場5401AB"; $receiver = []; $receiver["Name"] = "李先生"; $receiver["Mobile"] = "18888888888"; $receiver["ProvinceName"] = "李先生"; $receiver["CityName"] = "深圳市"; $receiver["ExpAreaName"] = "福田區"; $receiver["Address"] = "賽格廣場5401AB"; $commodityOne = []; $commodityOne["GoodsName"] = "其他"; $commodity = []; $commodity[] = $commodityOne; $eorder["Sender"] = $sender; $eorder["Receiver"] = $receiver; $eorder["Commodity"] = $commodity; //調用電子面單 $jsonParam = json_encode($eorder, JSON_UNESCAPED_UNICODE); //$jsonParam = JSON($eorder);//兼容php5.2(含)以下 echo "電子面單接口提交內容:<br/>".$jsonParam; $jsonResult = submitEOrder($jsonParam); echo "<br/><br/>電子面單提交結果:<br/>".$jsonResult; //解析電子面單返回結果 $result = json_decode($jsonResult, true); echo "<br/><br/>返回碼:".$result["ResultCode"]; if($result["ResultCode"] == "100") { echo "<br/>是否成功:".$result["Success"]; } else { echo "<br/>電子面單下單失敗"; } //------------------------------------------------------------- /** * Json方式 查詢訂單物流軌跡 */ function submitEOrder($requestData){ $datas = array( 'EBusinessID' => EBusinessID, 'RequestType' => '1007', 'RequestData' => urlencode($requestData) , 'DataType' => '2', ); $datas['DataSign'] = encrypt($requestData, AppKey); $result=sendPost(ReqURL, $datas); //根據公司業務處理返回的信息...... return $result; } /** * post提交數據 * @param string $url 請求Url * @param array $datas 提交的數據 * @return url響應返回的html */ function sendPost($url, $datas) { $temps = array(); foreach ($datas as $key => $value) { $temps[] = sprintf('%s=%s', $key, $value); } $post_data = implode('&', $temps); $url_info = parse_url($url); if($url_info['port']=='') { $url_info['port']=80; } echo $url_info['port']; $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n"; $httpheader.= "Host:" . $url_info['host'] . "\r\n"; $httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n"; $httpheader.= "Content-Length:" . strlen($post_data) . "\r\n"; $httpheader.= "Connection:close\r\n\r\n"; $httpheader.= $post_data; $fd = fsockopen($url_info['host'], $url_info['port']); fwrite($fd, $httpheader); $gets = ""; $headerFlag = true; while (!feof($fd)) { if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) { break; } } while (!feof($fd)) { $gets.= fread($fd, 128); } fclose($fd); return $gets; } /** * 電商Sign簽名生成 * @param data 內容 * @param appkey Appkey * @return DataSign簽名 */ function encrypt($data, $appkey) { return urlencode(base64_encode(md5($data.$appkey))); } /************************************************************** * * 使用特定function對數組中所有元素做處理 * @param string &$array 要處理的字符串 * @param string $function 要執行的函數 * @return boolean $apply_to_keys_also 是否也應用到key上 * @access public * *************************************************************/ function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { static $recursive_counter = 0; if (++$recursive_counter > 1000) { die('possible deep recursion attack'); } foreach ($array as $key => $value) { if (is_array($value)) { arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } $recursive_counter--; } /************************************************************** * * 將數組轉換為JSON字符串(兼容中文) * @param array $array 要轉換的數組 * @return string 轉換得到的json字符串 * @access public * *************************************************************/ function JSON($array) { arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); } ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $.getJSON('/kdPrintOrderDemo/printOrder', function(data){ $("#EBusinessID").val(data.EBusinessID) $("#RequestData").val(data.RequestData) $("#IsPreview").val(data.IsPreview) $("#DataSign").val(data.DataSign) form1.submit() }) }); </script> </head> <body> <h1>Demo</h1> <div id="head"></div> <form id="form1" action="http://www.kdniao.com/External/PrintOrder.aspx" method="post" target="_self"> <div style=""> <div><input type="text" id="RequestData" name="RequestData" /></div> <div><input type="text" id="EBusinessID" name="EBusinessID" /></div> <div><input type="text" id="DataSign" name="DataSign" /></div> <div><input type="text" id="IsPreview" name="IsPreview" /></div> </div> </form> </body> </html>
二、電子面單批量打印對接注意事項:
(1)確保接口中電商ID、密鑰(AppKey)與用戶管理后台的商戶ID、密鑰完全一致;
(2)OrderCode必須是快遞鳥電子面單下單接口正式環境下單的訂單號;PortName是打印機名稱,必須與客戶端本地打印機名稱一致;
(3)確保接口demo中GetIp()方法獲取到的IP和用戶服務器外網IP(百度搜索IP138)的一致。
(4)安裝快遞鳥打印控件C-Lodop (Print)
安裝方式1、調用快遞鳥批量打印demo后會提示下載。
安裝方式2、在快遞鳥官網下載,下載地址:快遞鳥官網打印控件下載_雲打印控件_電子面單打印控件_web打印控
需要特別注意:
1、如授權商家修改主賬號密碼,則授權碼(Access token)隨之失效,需重新授權。主賬號密碼不允許修改;
2、應用授權token有效期為一年。
3、token和CustomerPwd事業部編碼要唯一綁定。
最終,快遞鳥用戶,需要將以下對應信息,復制提供給快遞鳥技術支持進行配置:
EBusinessID快遞鳥ID:
AppKey:
App Secret:
token:
CustomerName商家編碼/青龍編碼:
CustomerPwd事業部編碼:
WareHouseID發貨倉編碼:
寄件人簡稱:
三、獲取簽名時,數據的拼接是否有誤?
原來的代碼中是用urlencode的形式將data數據進行編碼再簽名的,后期貌似不用進行url編碼,且提交表單中的請求數據必須加轉義字符