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


Posted in PHP onApril 08, 2019

背景:不久前,设计实现了京东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.实例化操作类,测试代码

include_once 'Express.php';
$waybillCode = 'VA33016759650';
$express = new Express();
$res = $express->expressinfo($waybillCode);
$trace = $res['data'];
var_dump($trace);

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

2.测试得到的数据

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

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

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

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

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

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

<?php
/**
 * Express.class.php 快递查询类 v1.0
 *
 * @copyright    百鬼夜行
 * @lastmodify    2017-01-19
 */
class Express
{
  //根据快递单号查询物流信息函数
  public function expressinfo($order){
    header('Content-Type:text/html; charset=utf-8');
    $result = $this -> getorder($order);
    $express = $this->traceExpress();
    foreach ($express as $key => $value){
      if ($result['com'] == $key){
        $result['comName'] = $value;
        break;
      }else{
        $result['comName'] = '暂无匹配';
      }
    }
    return $result;
  }

  //快递100物流公司
  public function traceExpress(){
    $express = array(
      'aae' => 'aae全球专递',
      'anjie' => '安捷快递',
      'anxindakuaixi' => '安信达快递',
      'biaojikuaidi' => '彪记快递',
      'datianwuliu' => '大田物流',
      'debangwuliu' => '德邦物流',
      'ems' => 'ems快递',
      'guotongkuaidi' => '国通快递',
      'huitongkuaidi' => '汇通快运',
      'jixianda' => '急先达',
      'kuaijiesudi' => '快捷速递',
      'quanfengkuaidi' => '全峰快递',
      'rufengda' => '如风达',
      'shentong' => '申通',
      'shunfeng' => '顺丰',
      'tiantian' => '天天快递',
      'xinfengwuliu' => '信丰物流',
      'yibangwuliu' => '一邦速递',
      'yuantong' => '圆通速递',
      'yunda' => '韵达快运',
      'zhaijisong' => '宅急送',
      'zhongtong' => '中通速递',
      'jd' => '京东快递'
    );
    return $express;
  }

  /*
   * 网页内容获取方法
  */
  private function getcontent($url)
  {
    if (function_exists("file_get_contents")) {
      $file_contents = file_get_contents($url);
    } else {
      $ch   = curl_init();
      $timeout = 5;
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
      $file_contents = curl_exec($ch);
      curl_close($ch);
    }
    return $file_contents;
  }

  /*
   * 获取对应名称和对应传值的方法
  */
  private function expressname($order)
  {
    $name  = json_decode($this->getcontent("http://www.kuaidi100.com/autonumber/auto?num={$order}"), true);
    $result = $name[0]['comCode'];
    if (empty($result)) {
      return false;
    } else {
      return $result;
    }
  }

  /*
   * 返回$data array   快递数组查询失败返回false
   * @param $order    快递的单号
   * $data['ischeck'] ==1 已经签收
   * $data['data']    快递实时查询的状态 array
  */
  public function getorder($order)
  {
    $keywords = $this->expressname($order);
    if (!$keywords) {
      return false;
    } else {
      $result = $this->getcontent("http://www.kuaidi100.com/query?type={$keywords}&postid={$order}");
      $data  = json_decode($result, true);
      return $data;
    }
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
PHP 批量删除 sql语句
Jun 05 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
php字符串分割函数用法实例
Mar 17 PHP
详解PHP数组赋值方法
Nov 07 PHP
php文件缓存方法总结
Mar 16 PHP
PHP中number_format()函数的用法讲解
Apr 08 #PHP
微信JSSDK分享功能图文实例详解
Apr 08 #PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 #PHP
详解php命令注入攻击
Apr 06 #PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 #PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 #PHP
PHP7匿名类的用法示例
Apr 05 #PHP
You might like
文件上传的实现
2006/10/09 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
php创建图像具体步骤
2017/03/13 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
Python探索之SocketServer详解
2017/10/28 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
利用python计算时间差(返回天数)
2019/09/07 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
财产公证书样本
2014/04/04 职场文书
疾病捐款倡议书
2014/05/13 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS