快递鸟物流对接--电商
一、准备阶段
你需要自己去快递鸟注册信息,或者是公司会给你对接接口所需要的EBusinessID、AppKey (这个必须有,没有的话还搞什么)
在官网可下载接口文档、快递公司的编码(这个也得有,没有怎么查)
二、代码示例(这个可以直接拿来用,将你的参数改一改就可以了)
public $ReqURL='https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx'; public $EBusinessID='1111111'; public $AppKey='111111111111111111111111'; public function getOrderTracesByJson($customerName,$key,$number){ // 组装应用级参数 $requestData= "{". "'CustomerName': '$customerName',". "'OrderCode': '',". "'ShipperCode': '$key',". "'LogisticCode': '$number',". "}"; // 组装系统级参数 $datas = array( 'EBusinessID' => $this->EBusinessID, 'RequestType' => '8001', //免费即时查询接口指令1002/在途监控即时查询接口指令8001/地图版即时查询接口指令8003 'RequestData' => urlencode($requestData) , 'DataType' => '2', ); $datas['DataSign'] = $this->encrypt($requestData, $this->AppKey); //以form表单形式提交post请求,post请求体中包含了应用级参数和系统级参数 $result = json_decode($this->sendPost($this->ReqURL, $datas),1); if ($result){ if( $result['Success'] === false ) { $traces[$key]['alttime'] = date('Y-m-d H:i:s',time()); $traces[$key]['log_text'] = $result['Reason']; } if ($result['Success'] === true ){ if( $result['State'] == '0' ) { $traces[$key]['alttime'] = date('Y-m-d H:i:s',time()); $traces[$key]['log_text'] = $result['Reason']; } $traces = array(); if($result['Traces']){ foreach( $result['Traces'] as $key=>$value) { $traces[$key]['alttime'] = $value['AcceptTime']; $traces[$key]['log_text'] = strip_tags($value['AcceptStation']); } if ($result['State'] == 3){ $traces['State']=$result['State']; } return $traces; }else{ $traces[$key]['alttime'] = date('Y-m-d H:i:s',time()); $traces[$key]['log_text'] = '查询失败,请到快递公司官网查询'; } } }else{ $traces[$key]['alttime'] = date('Y-m-d H:i:s',time()); $traces[$key]['log_text'] = '查询失败,请到快递公司官网查询'; } } /** * post提交数据 * @param string $url 请求Url * @param array $datas 提交的数据 * @return url响应返回的html */ public function sendPost($url, $datas) { $postdata = http_build_query($datas); $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded', 'content' => $postdata, 'timeout' => 15 * 60 // 超时时间(单位:s) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result; } /** * 电商Sign签名生成 * @param data 内容 * @param ApiKey ApiKey * @return DataSign签名 */ public function encrypt($data, $ApiKey) { return urlencode(base64_encode(md5($data.$ApiKey))); }
注释:$customerName -- 如果是顺丰的话需要发货人或者收件人的手机号后四位,其他快递不需要
$key -- 快递公司编号(eg:STO SF JD)
$number -- 物流单号
getOrderTracesByJson,这个方法里面我根据实际需要将数据进行了一些修改,可以根据自己的业务需要进行修改