快遞鳥電子面單批量打印以及模板設置


快遞鳥作為全球最大的第三方物流接口服務商,電子面單可一次性對接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編碼,且提交表單中的請求數據必須加轉義字符


免責聲明!

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



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