
春风和煦 - 云代码空间
——
电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务。通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍。电子面单以接口形式嵌入到自己的系统、网站上,可以在自己的平台操作打印电子面单。
一.电子面单接口类型及定义
1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必须快递公司上门做系统对接,使用一家快递则需要对接一次。
2.菜鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接。支持快递有四通一达、EMS、宅急送、德邦、优速、天天、快捷、全峰等15家常用快递公司,其中不包括顺丰。
3.快递鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接。支持快递有四通一达、顺丰、EMS、宅急送、德邦、优速等15家快递公司,对顺丰有电子面单服务需求的可以选择顺丰自有的电子面单或者是快递鸟电子面单。
二.开通使用流程
1.快递电子面单
a. 和多家快递公司申请账号
b.分别进行接口对接
c.电子面单服务用户向快递网点申请开通及确认合作细节
2.菜鸟电子面单
a.向菜鸟提交对接申请
b.和菜鸟进行接口对接
c.电子面单服务用户向菜鸟申请账号
d.电子面单服务用户向快递网点申请开通及确认合作细节
3.快递鸟电子面单
a. 进入http://www.kdniao.com/reg申请账号,获取专属的ID和KEY
b.和快递鸟进行接口对接
c.电子面单服务用户向快递网点申请开通及确认合作细节
接口类型较多,以下先附上快递鸟电子面单接口调用方式,希望对大家有所帮助。后面将逐个对菜鸟电子面单、顺丰电子面单等接口调用方式做整理说明。
三.电子面单对接案例—快递鸟
1.接口描述
接口支持的消息接收方式:HTTP POST
请求方法的编码格式(utf-8):"application/x-www-form-urlencoded;charset=utf-8"
API地址:http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx
2.PHP对接案例
<?php
//电商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);
}
?>