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 相关文章推荐
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
php知道与问问的采集插件代码
Oct 12 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
Mar 23 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
用Simple Excel导出xls实现方法
2012/12/06 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
python调用新浪微博API项目实践
2014/07/28 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
Python csv模块使用方法代码实例
2019/08/29 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Python urllib2运行过程原理解析
2020/06/04 Python
Python学习之time模块的基本使用
2021/01/17 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
Ruby如何定义一个类
2012/10/08 面试题
2014年少先队工作总结
2014/12/03 职场文书
继承公证书格式
2015/01/26 职场文书
社区党员干部承诺书
2015/05/04 职场文书
二审代理词范文
2015/05/25 职场文书
单位车辆管理制度
2015/08/05 职场文书
公司致全体员工的感谢信
2019/06/24 职场文书