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 相关文章推荐
操作Oracle的php类
Oct 09 PHP
一键删除顽固的空文件夹 软件下载
Jan 26 PHP
escape unescape的php下的实现方法
Apr 27 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
PHP命令行与定时任务
Apr 01 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
第五节--克隆
2006/11/16 PHP
开发大型 PHP 项目的方法
2007/01/02 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
Javascript typeof 用法
2008/12/28 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
Python中List.index()方法的使用教程
2015/05/20 Python
python中argparse模块用法实例详解
2015/06/03 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python元组知识点总结
2019/02/18 Python
python字典一键多值实例代码分享
2019/06/14 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
python安装requests库的实例代码
2019/06/25 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Django通过json格式收集主机信息
2020/05/29 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
大学校庆邀请函
2014/01/11 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
销售口号大全
2014/06/11 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript