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常用代码
Nov 23 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
PHP操作数组相关函数
Feb 03 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
php编写简单的文章发布程序
Jun 18 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 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
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
python中readline判断文件读取结束的方法
2014/11/08 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
keras:model.compile损失函数的用法
2020/07/01 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
企业管理专业个人求职信范文
2013/09/24 职场文书
中专自荐信
2013/10/13 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
车间主任岗位职责
2014/03/16 职场文书
论文评语大全
2014/04/29 职场文书
公关活动策划方案
2014/05/25 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
小学体育组工作总结
2015/08/13 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python