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反向代理设置对外的WWW和文件服务器
Oct 09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
PHP与SQL注入攻击[一]
Apr 17 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php入门学习知识点三 PHP上传
Jul 14 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
php ios推送(代码)
Jul 01 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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产生随机字符串函数
2006/12/06 PHP
js下获取div中的数据的原理分析
2010/04/07 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
不可错过的十本Python好书
2017/07/06 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
详解Python字典的操作
2019/03/04 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
学校七一活动方案
2014/01/19 职场文书
美容院经理岗位职责
2014/04/03 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
实习证明格式范文
2014/10/14 职场文书
党员年终个人总结
2015/02/14 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python