当前位置:首页 > PHP

php实现快递进度

2026-02-14 02:15:34PHP

PHP实现快递进度查询

方法一:使用快递100 API

快递100提供了免费的快递查询API接口,可以通过PHP调用获取快递进度信息。

php实现快递进度

注册快递100开发者账号,获取API Key。 使用PHP的cURL函数发送HTTP请求到快递100的API接口。

php实现快递进度

$expressNo = '快递单号';
$companyCode = '快递公司编码';
$key = '你的API Key';

$url = "https://api.kuaidi100.com/api?id={$key}&com={$companyCode}&nu={$expressNo}&show=0&muti=1&order=desc";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
curl_close($ch);

$result = json_decode($output, true);
if($result['status'] == '200') {
    foreach($result['data'] as $item) {
        echo $item['time'] . ' ' . $item['context'] . '<br>';
    }
} else {
    echo '查询失败:' . $result['message'];
}

方法二:使用阿里云快递查询API

阿里云也提供了快递查询服务,需要先开通服务并获取AccessKey。

$expressNo = '快递单号';
$companyCode = '快递公司编码';
$accessKeyId = '你的AccessKey ID';
$accessKeySecret = '你的AccessKey Secret';

$params = [
    'Action' => 'QueryExpress',
    'Version' => '2018-05-01',
    'ExpressNo' => $expressNo,
    'CompanyCode' => $companyCode
];

// 生成签名
ksort($params);
$canonicalizedQueryString = '';
foreach($params as $key => $value) {
    $canonicalizedQueryString .= '&' . rawurlencode($key) . '=' . rawurlencode($value);
}
$stringToSign = 'GET&%2F&' . rawurlencode(substr($canonicalizedQueryString, 1));
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));

$url = 'https://express.aliyuncs.com/?' . http_build_query($params) . '&Signature=' . rawurlencode($signature);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $accessKeyId
]);
$output = curl_exec($ch);
curl_close($ch);

$result = json_decode($output, true);
if(isset($result['Traces'])) {
    foreach($result['Traces'] as $trace) {
        echo $trace['AcceptTime'] . ' ' . $trace['AcceptStation'] . '<br>';
    }
}

方法三:直接抓取快递公司官网数据

对于不支持API的快递公司,可以使用PHP抓取官网数据。

$expressNo = '快递单号';
$url = "https://www.sf-express.com/cn/sc/dynamic_function/waybill/#search/bill-number/{$expressNo}";

$html = file_get_contents($url);

// 使用正则表达式或DOM解析提取数据
preg_match_all('/<div class="time">(.*?)<\/div>.*?<div class="context">(.*?)<\/div>/s', $html, $matches);

if(!empty($matches[1])) {
    for($i = 0; $i < count($matches[1]); $i++) {
        echo $matches[1][$i] . ' ' . $matches[2][$i] . '<br>';
    }
}

注意事项

  • API方式需要注册开发者账号并获取密钥
  • 直接抓取网站数据可能违反网站使用条款
  • 建议对查询结果进行缓存,避免频繁请求
  • 处理返回数据时要注意错误处理和异常捕获

以上方法可以根据实际需求选择使用,API方式更稳定但可能有调用限制,直接抓取方式更灵活但维护成本较高。

标签: 进度快递
分享给朋友:

相关文章

vue实现页面加载进度

vue实现页面加载进度

Vue 实现页面加载进度的方法 使用 NProgress 库 安装 NProgress 库: npm install nprogress 在 Vue 项目中引入并使用: import NProgr…

css制作快递单

css制作快递单

CSS 制作快递单的方法 使用CSS制作快递单需要结合HTML和CSS的结构布局,模拟快递单的样式。以下是实现方法: HTML结构 <div class="express-bill"…

css制作快递单

css制作快递单

CSS制作快递单的方法 使用CSS可以设计出简洁美观的快递单样式,以下是具体实现方法: 基础结构 快递单通常包含寄件人、收件人信息、订单号、物品详情等区块。HTML结构示例: <di…

php下载进度实现

php下载进度实现

PHP 下载进度实现 在 PHP 中实现下载进度显示通常需要结合前端和后端技术,以下是一种常见的实现方法: 使用 PHP 的 readfile() 或 fread() 结合 JavaScript 这…

php 实现上传进度

php 实现上传进度

PHP 实现上传进度的方法 使用 session.upload_progress 功能 PHP 提供了一个内置功能 session.upload_progress,可以在文件上传时跟踪进度。需要在 p…

vue实现扇形进度

vue实现扇形进度

Vue 实现扇形进度条 使用 SVG 绘制扇形 SVG 提供了一种灵活的方式来绘制扇形进度条。可以通过 path 元素结合 d 属性动态生成扇形路径。 <template> <…