中通/圆通API接口 PHP 简单封装示例
生活随笔
收集整理的這篇文章主要介紹了
中通/圆通API接口 PHP 简单封装示例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
圓通 API 接口 - 簡單封裝 PHP
yto.api.php 文件
class YTO {private $_domain = 'http://opentestapi.yto.net.cn/service/',$_id,$_key,$_secret,$url,$values,$result,$_mouth = [];const config = ['traces' => ['_id' => "YTOTEST",'_key' => "sF1Jzn",'_secret' => "1QLlIZ"],'orders' => ['_id' => "K21000119",'_key' => "u2Z1F7Fh",'_secret' => null]];function __construct($c,$mouth=[]){if($c) foreach($c as $k=>$v) if(property_exists($this,$k)) $this->$k=$v;return self::mouth($mouth);}function __set($n,$v){if($v != '') $this->values[$n] = $v;}function __get($name){return $this->values[$name];}public function mouth($arr){$this->_mouth = array_merge($this->_mouth,$arr);return $this;}private function clear(){$this->url = $this->values = null;return $this;}public function init($m = 'orders'){return self::__construct(self::config[$m]);}// 封裝 start =========================================================public function orders($data,$open = []){self::send('orders');if(!$open) $open = ['id'=>$this->_id,'key' => $this->_key];$tpl = '{clientID:'.$open['id'].',logisticProviderID:YTO,customerId:'.$open['id'].',txLogisticID:orderid,orderType:1,serviceType:0,flag:1,sender:sender,receiver:receiver}';$data = self::add($tpl,$data,true);$data = self::enxml(['RequestOrder'=>$data]);$open['data'] = $data;$open['sign'] = base64_encode(md5($data.$open['key'],true));$tpl = '{type:offline,clientId:id,logistics_interface:data,data_digest:sign}';return self::add($tpl,$open);}public function traces($bill){$tpl = '{format:JSON,user_id:id,app_key:key,timestamp:time,v:1.01,method:yto.Marketing.WaybillTrace}';$data = self::send('traces')->add($tpl,['id' => $this->_id,'key' => $this->_key,'time' => date('Y-m-d H:i:s')],true);ksort($data);$sing = $this->_secret;foreach($data as $k=>$v) $sing .= $k.$v;$this->sign = strtoupper(md5($sing));return $this->add(['param'=>json_encode([["Number"=>$bill]]) ]);}// 封裝 END =========================================================//=========================================================public function add($a,$b=[],$c=[]){if(!is_array($a)) return self::addjson($a,$b,$c);foreach($a as $k=>$v) $this->$k = $v;if($b === true) return $this->values;return $this;}public function addjson($v,$a=[],$c=[]){$v = preg_replace(['/:(\s+)?([0-9a-zA-z-\.]+)/i','/\s/','/(\{|,)(\w+):/i'],[':"$2"','','$1"$2":'],$v);$v = json_decode($v,true);if(!$v) return ['error'=>500];if($a) $v = self::forAll($v,$a);return self::add($v,$c);}private function forAll($val,$arr){foreach($val as $k=>$key)$val[$k] = self::findAll($key,$arr);return $val;}private function findAll($val,$arr){if(is_array($val)) return self::forAll($val,$arr);$val = explode('.',$val);foreach($val as $key){if(isset($arr[$key])) return $arr[$key];if($v = self::findArr($key,$arr)){$arr = $v;}else return join('.',$val);}return $arr;}private function findArr($val,$arr){preg_match('/^(\w+)\[(.*?)\]$/',$val,$d);if(!isset($d[2])) return false;$v = explode(',',$d[2]);if(!isset($arr[$d[1]])) return $val;$val = self::forAll($v,$arr[$d[1]]);return join(',',$val);}// XML Start ==========================================================private function enxml($data) {if(!is_array($data)) return $data;$xml = '';foreach ($data as $key=>$val) $xml .= "<{$key}>".self::enxml($val)."</{$key}>";return $xml;}private function enarray(){$xml = xml_parser_create();if(!xml_parse($xml,$this->result,true)){xml_parser_free($xml);$this->result = json_decode($this->result,true);}else{libxml_disable_entity_loader(true);$this->result = json_decode(json_encode(simplexml_load_string($this->result, 'SimpleXMLElement', LIBXML_NOCDATA)),true);}return $this;}// XML END =============================================================final private function curl(){$cfg = [CURLOPT_URL => $this->url //設置訪問的url地址 ,CURLOPT_TIMEOUT => 30 //設置超時時間,CURLOPT_HEADER => 0 //是否顯示頭部信,CURLOPT_FOLLOWLOCATION => 1 //跟蹤301 ,CURLOPT_RETURNTRANSFER => 1 //返回結(jié)果];if($val = $this->values){ //post提交方式$cfg[CURLOPT_POST] = 1;$cfg[CURLOPT_HTTPHEADER] = ['content-type:application/x-www-form-urlencoded'];$cfg[CURLOPT_POSTFIELDS] = is_array($val)?http_build_query($val):$val;}$c = curl_init();curl_setopt_array($c,$cfg);$this->result = curl_exec($c);curl_close($c);return self::clear()->enarray(); // 強制返回數(shù)組格式}public function send($v){$api = self::init($v)->_mouth[$v];$this->url = $this->_domain.$api['link'];return $this;}public function fetch($key=null){return self::curl()->find($key);}private function find($key){if($key === null) return $this->result;$key = explode('.',$key);foreach($key as $k)$this->result = isset($this->result[$k])?$this->result[$k]:null;return $this->result;}}圓通 demo.php
header('Content-type: text/html; charset=utf-8'); include 'yto.api.php'; function text($code){echo '<textarea style="width:100%;height:200px">';print_r($code);echo '<textarea>'; } // 統(tǒng)一規(guī)范接口名稱 (方便順豐、中通、申通、圓通等任何快遞統(tǒng)一化) $api = ['orders' => ['link'=>'e_order_create/v1/SVJ14f'],'traces' => ['link'=>'waybill_query/v1/SVJ14f'] ]; $cfg = [//'_domain' => 'http://openapi.yto.net.cn/service/' ]; $yto = new YTO($cfg,$api);echo '<h3>查詢物流軌跡</h3>'; $traces = $yto->traces('YT4384846240399')->fetch(); // 指定提取結(jié)果 第 N 條 (內(nèi)部封裝倒序返回最新一條記錄使用)text($traces); echo '<h3>電子面單下單</h3>'; $test = ['name' => '慧繼數(shù)碼科技','mobile' => '13800138000','phone' => '0757-2770000','prov' => '廣東省','city' => '佛山市,順德區(qū)','address' => '杏壇鎮(zhèn)杏龍路65號' ]; $data = ['orderid' => time(),'sender' => $test,'receiver' => $test ]; $orders = $yto->orders($data)//->orders($data,['id'=>'K21000119','key'=>'u2Z1F7Fh']) // 外部商家打單->fetch('distributeInfo'); // 可指定提取子元素 distributeInfo.packageCenterCode text($orders); echo '<h5>轉(zhuǎn)換</h5>'; //--------------------------------------------------------------- // 轉(zhuǎn)換為自需格式和字段 $tpl = '{acode: consigneeBranchCode,bcode: packageCenterCode,name: packageCenterName,cname: packageCenterName,addr: printKeyWord,mark: shortAddress }'; $orders_result2 = $yto->add($tpl,$orders,true); text($orders_result2);中通 API 接口 - 簡單封裝 PHP
zto.api.php 文件
class ZTO {private $_domain,$_id,$_key,$_url,$_param,$_header,$_mouth=[],$result;function __construct($c,$mouth=[]){foreach($c as $k=>$v)if(property_exists($this,$k)) $this->$k=$v;return self::mouth($mouth);}final public function mouth($arr){if(is_array($arr)) $this->_mouth = array_merge($this->_mouth,$arr);return $this;}final public function test(){return self::__construct(['_domain' => "http://58.40.16.120:9001",'_key' => "kfpttestkey==",'_id' => "kfpttestCode"]);}function __set($n,$v){if($v != '') $this->_param[$n] = $v;}final private function clear(){$this->_url = $this->_param = $this->_header = null;return $this;}final private function curl(){$cfg = [CURLOPT_URL => $this->_url //設置訪問的url地址 ,CURLOPT_TIMEOUT => 30 //設置超時時間,CURLOPT_HEADER => 0 //是否顯示頭部信,CURLOPT_FOLLOWLOCATION => 1 //跟蹤301 ,CURLOPT_RETURNTRANSFER => 1 //返回結(jié)果];if($par = $this->sign()){$this->_header[] = 'content-type:application/x-www-form-urlencoded';$cfg[CURLOPT_POST] = 1;$cfg[CURLOPT_HTTPHEADER] = $this->_header;$cfg[CURLOPT_POSTFIELDS] = is_array($par)?http_build_query($par):$par;}$c = curl_init(); curl_setopt_array($c,$cfg);$this->result = curl_exec($c);curl_close($c);return self::clear(); }private function enarray(){$this->result = json_decode($this->result,true);return $this;}final public function add($key,$val){$this->$key = is_array($val)?json_encode($val,JSON_UNESCAPED_UNICODE):$val;return $this;}final private function sign(){$data = http_build_query($this->_param);$this->_header = ['x-companyId:'.$this->_id,'x-dataDigest:'.base64_encode(md5(urldecode($data).$this->_key,true))];return $data;}final public function send($v){$mouth = $this->_mouth[$v];$this->company_id = $this->_id;if(isset($mouth['type']) == true) $this->msg_type = $mouth['type'];$this->_url = $this->_domain.'/'.$mouth['link'];return $this;}public function fetch($key=null){return self::curl()->find($key);}private function find($key){if($key === true) return $this->result;self::enarray();if($key === null) return $this->result;$key = explode('.',$key);foreach($key as $k)$this->result = isset($this->result[$k])?$this->result[$k]:null;return $this->result;}}中通 demo.php
header('Content-type: text/html; charset=utf-8'); include 'zto.api.php'; function text($code){echo '<textarea style="width:100%;height:200px">';print_r($code);echo '<textarea>'; } $cfg = ['_domain' => 'http://japi.zto.cn','_id' => '商家ID','_key' => '商家KEY']; $api = [ // api接口: type=msg_type link=訪問地址'mark' => ['type'=>'GETMARK' ,'link'=>'bagAddrMarkGetmark'],'order' => ['type'=>'submitAgent' ,'link'=>'partnerInsertSubmitagent'],'balance' => ['type'=>'availableCounter','link'=>'partnerInsertAvailablecounter'],'latest' => ['type'=>'LATEST' ,'link'=>'traceInterfaceLatest'],'traces' => ['type'=>'NEW_TRACES' ,'link'=>'traceInterfaceNewTraces'],'cancel' => ['type'=>'UPDATE' ,'link'=>'commonOrderUpdate'],'search' => ['type'=>'SEARCH' ,'link'=>'commonOrderSearch'],'create' => ['link'=>'OpenOrderCreate'],'orders' => ['link'=>'submitOrderCode'],'balances' => ['link'=>'AvailableBalance']]; $zto = new ZTO($cfg,$api); // 查詢物流 軌跡 - 詳細 $traces = $zto//->test() //開啟測試狀態(tài)->send('traces') // 查詢物流軌跡 (latest 最新一條) /*Method: addParam: 1、(string) data ,2、(array||json) => 數(shù)組或json格式*/->add('data',["73127935835561","73127935654469"])/*Method: fetchParam: 默認:返回數(shù)組,true=直接返回json格式,(data,0) 指定返回層級*/->fetch(true);print_r($traces);echo '<hr>'; // 電子面單 - 余額$balance = $zto->send('balance')->add('data',['partner' => $cfg['_id']])->fetch('data');print_r($balance); // 預約訂單 - 創(chuàng)建//$create = $zto// ->send('create')// ->add('orderGroup',$json)// ->fetch();//print_r($create); exit(); // 預約訂單 - 取消$data = $zto->send('cancel')->add('data','[{"orderCode":"180504000375067107","fieldName":"status","fieldValue":"cancel","reason":"客戶取消訂單"}]')->fetch();print_r($data); // 預約訂單 - 查詢$data = $zto->send('search')->add('data',["sendId" => $cfg['_id'],"starttime" => "2018-05-01 00:00:00","endtime" => "2018-05-04 23:59:59","pageSize" => 20,"pageIndex" => 1])->fetch();print_r($data);exit('end');總結(jié)
以上是生活随笔為你收集整理的中通/圆通API接口 PHP 简单封装示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙玩王者荣耀,王者荣耀鸿蒙版
- 下一篇: java生成二维码 并调用二维码打印机