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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
PHP 中的类
Oct 09 PHP
在线短消息收发的程序,不用数据库
Oct 09 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
PHP编程函数安全篇
Jan 08 PHP
在PHP中使用redis
Nov 04 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
Jul 04 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
php简单复制文件的方法
May 09 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 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
PHP函数utf8转gb2312编码
2006/12/21 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
给ECShop添加最新评论
2015/01/07 PHP
php实现点击可刷新验证码
2015/11/07 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
javascript中的float运算精度实例分析
2010/08/21 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
jQuery - AJAX load() 实例用法详解
2019/08/27 jQuery
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
python 调用钉钉机器人的方法
2019/02/20 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
工作说明书范文
2014/05/07 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库