当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP开发实现快递查询功能详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-15 21:33:40 浏览: 评论:0 

这篇文章主要介绍了PHP开发实现快递查询功能,结合实例形式分析了php使用快递鸟查询接口进行快递查询的相关实现步骤与操作技巧,需要的朋友可以参考下。

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

一.快递鸟

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

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

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

PHP快递查询

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

PHP快递查询

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

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

PHP快递查询

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

PHP快递查询

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

3.输出效果

PHP快递查询

二.快递100设计实现

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

  1. include_once 'Express.php'; 
  2. $waybillCode = 'VA33016759650'; 
  3. $express = new Express(); 
  4. $res = $express->expressinfo($waybillCode); 
  5. $trace = $res['data']; 
  6. var_dump($trace); 

(注意:此处只需传入一个快递单号即可,相比前面的快递鸟api而言,更为智能)

2.测试得到的数据

PHP快递查询

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

PHP快递查询

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

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

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

  1. <?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 (emptyempty($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. }

Tags: PHP快递查询

分享到: