评论

收藏

[PHP] PHP开发实现快递查询功能详解

开发技术 开发技术 发布于:2021-08-21 13:00 | 阅读数:452 | 评论:0

背景:不久前,设计实现了京东api的功能,发现如果换了其它快递再重新设计,岂不是会浪费太多的时间,所以选个第三方提供的快递api是最为合理的,下面给出快递鸟和快递100的设计实现。
一.快递鸟
i.快递鸟api实现物流即时查询
1.首先要有一个快递鸟账号,根据对方的要求,完善用户申请。
2.根据自己的需求,开通服务
DSC0000.png

3.进入“我的api接口”,根据“接口”中的开发文档了解设计需求,下载官方demo,编辑为适合自己的代码。
DSC0001.jpg

ii.“即时查询”代码实现
1.修改官方的demo代码,我在此分离出了一个快递类,提高适用性
DSC0002.jpg

2.引入类文件,实例化并进行测试
DSC0003.jpg

(注意:引用此api时,明确除传入物流单号参数外,还需要“快递公司编码”,可点击下载后存入自己设计平台的数据库,发现一点,excel表中没有京东物流却可以使用“jd”查到,估计是表格更新不够即时性)
3.输出效果
DSC0004.jpg

二.快递100设计实现
1.实例化操作类,测试代码
include_once 'express.php';
$waybillcode = 'va33016759650';
$express = new express();
$res = $express->expressinfo($waybillcode);
$trace = $res['data'];
var_dump($trace);
(注意:此处只需传入一个快递单号即可,相比前面的快递鸟api而言,更为智能)
2.测试得到的数据
DSC0005.jpg

3.界面简单设计效果如下,仅做参考
DSC0006.jpg

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程序设计有所帮助。
原文链接:https://blog.csdn.net/u011415782/article/details/54093537

关注下面的标签,发现更多相似文章