快递查询的设计实现

背景:不久前,设计实现了京东api的功能,发现如果换了其它快递再重新设计,岂不是会浪费太多的时间,所以选个第三方提供的快递API是最为合理的,下面给出快递鸟和快递100的设计实现。

    一.快递鸟

    I.快递鸟api实现物流即时查询

    1.首先要有一个快递鸟账号,根据对方的要求,完善用户申请。

    2.根据自己的需求,开通服务

    

    3.进入“我的API接口”,根据“接口”中的开发文档了解设计需求,下载官方demo,编辑为适合自己的代码。

    

    II.“即时查询”代码实现

    1.修改官方的demo代码,我在此分离出了一个快递类,提高适用性

    

    2.引入类文件,实例化并进行测试

    

(注意:引用此api时,明确除传入物流单号参数外,还需要“快递公司编码”,可点击下载后存入自己设计平台的数据库,发现一点,excel表中没有京东物流却可以使用“JD”查到,估计是表格更新不够即时性)

    3.输出效果

    

二.快递100设计实现

    1.实例化操作类,测试代码

include_once 'Express.php';
$waybillCode = 'VA33016759650';
$express = new Express();
$res = $express->expressinfo($waybillCode);
$trace = $res['data'];
var_dump($trace);
(注意:此处只需传入一个快递单号即可,相比前面的快递鸟api而言,更为智能)  

    2.测试得到的数据

    

    3.界面简单设计效果如下,仅做参考

    

    4.补充参考代码,匹配显示常用物流公司(2017-1-19

    显然,需要按照获取到的物流信息中的“com”与快递100提供的编码进行对应,然后发现,只有word文档,如果有excel表,那就方便录入数据库了...

    更新后的Express.class.php 代码如下:

  1. <span style="font-size:12px;"><?php  
  2. /** 
  3.  * Express.class.php 快递查询类 v1.0 
  4.  * 
  5.  * @copyright        百鬼夜行 
  6.  * @lastmodify       2017-01-19 
  7.  */  
  8. class Express  
  9. {  
  10.     //根据快递单号查询物流信息函数  
  11.     public function expressinfo($order){  
  12.         header('Content-Type:text/html; charset=utf-8');  
  13.         $result  = $this -> getorder($order);  
  14.         $express = $this->traceExpress();  
  15.         foreach ($express as $key => $value){  
  16.             if ($result['com'] == $key){  
  17.                 $result['comName'] = $value;  
  18.                 break;  
  19.             }else{  
  20.                 $result['comName'] = '暂无匹配';  
  21.             }  
  22.         }  
  23.         return $result;  
  24.     }  
  25.   
  26.     //快递100物流公司  
  27.     public function traceExpress(){  
  28.         $express = array(  
  29.             'aae' => 'aae全球专递',  
  30.             'anjie' => '安捷快递',  
  31.             'anxindakuaixi' => '安信达快递',  
  32.             'biaojikuaidi' => '彪记快递',  
  33.             'datianwuliu' => '大田物流',  
  34.             'debangwuliu' => '德邦物流',  
  35.             'ems' => 'ems快递',  
  36.             'guotongkuaidi' => '国通快递',  
  37.             'huitongkuaidi' => '汇通快运',  
  38.             'jixianda' => '急先达',  
  39.             'kuaijiesudi' => '快捷速递',  
  40.             'quanfengkuaidi' => '全峰快递',  
  41.             'rufengda' => '如风达',  
  42.             'shentong' => '申通',  
  43.             'shunfeng' => '顺丰',  
  44.             'tiantian' => '天天快递',  
  45.             'xinfengwuliu' => '信丰物流',  
  46.             'yibangwuliu' => '一邦速递',  
  47.             'yuantong' => '圆通速递',  
  48.             'yunda' => '韵达快运',  
  49.             'zhaijisong' => '宅急送',  
  50.             'zhongtong' => '中通速递',  
  51.             'jd' => '京东快递'  
  52.         );  
  53.         return $express;  
  54.     }  
  55.   
  56.     /* 
  57.      * 网页内容获取方法 
  58.     */  
  59.     private function getcontent($url)  
  60.     {  
  61.         if (function_exists("file_get_contents")) {  
  62.             $file_contents = file_get_contents($url);  
  63.         } else {  
  64.             $ch      = curl_init();  
  65.             $timeout = 5;  
  66.             curl_setopt($ch, CURLOPT_URL, $url);  
  67.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
  68.             curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
  69.             $file_contents = curl_exec($ch);  
  70.             curl_close($ch);  
  71.         }  
  72.         return $file_contents;  
  73.     }  
  74.   
  75.     /* 
  76.      * 获取对应名称和对应传值的方法 
  77.     */  
  78.     private function expressname($order)  
  79.     {  
  80.         $name   = json_decode($this->getcontent("http://www.kuaidi100.com/autonumber/auto?num={$order}"), true);  
  81.         $result = $name[0]['comCode'];  
  82.         if (empty($result)) {  
  83.             return false;  
  84.         } else {  
  85.             return $result;  
  86.         }  
  87.     }  
  88.   
  89.     /* 
  90.      * 返回$data array      快递数组查询失败返回false 
  91.      * @param $order        快递的单号 
  92.      * $data['ischeck'] ==1 已经签收 
  93.      * $data['data']        快递实时查询的状态 array 
  94.     */  
  95.     public function getorder($order)  
  96.     {  
  97.         $keywords = $this->expressname($order);  
  98.         if (!$keywords) {  
  99.             return false;  
  100.         } else {  
  101.             $result = $this->getcontent("http://www.kuaidi100.com/query?type={$keywords}&postid={$order}");  
  102.             $data   = json_decode($result, true);  
  103.             return $data;  
  104.         }  
  105.     }  
  106. }  
  107. </span>  


 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值