当前位置:首页 > PHP

php实现快递进度

2026-02-14 02:15:34PHP

PHP实现快递进度查询

方法一:使用快递100 API

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

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

$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方式更稳定但可能有调用限制,直接抓取方式更灵活但维护成本较高。

php实现快递进度

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

相关文章

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue实现上传进度

vue实现上传进度

Vue 实现文件上传进度 在 Vue 中实现文件上传进度可以通过 XMLHttpRequest 或 axios 的 onUploadProgress 事件来监听上传进度。以下是两种常见实现方式: 使…

vue实现进度圈效果

vue实现进度圈效果

使用 SVG 和 CSS 动画实现进度圈 在 Vue 中实现进度圈效果可以通过 SVG 结合 CSS 动画或 JavaScript 动态计算完成。以下是两种常见方法: 方法一:基于 SVG 的环形进…

vue实现视频进度加载

vue实现视频进度加载

实现视频进度加载的基本思路 在Vue中实现视频进度加载通常涉及监听视频的timeupdate事件,计算当前播放时间与总时长的比例,并更新进度条显示。核心是通过<video>元素的API和自…

vue实现快递打单

vue实现快递打单

Vue 实现快递打单功能 快递打单功能的核心模块 快递打单通常涉及订单信息获取、模板设计、打印控制三个核心模块。Vue 作为前端框架,需要结合后端 API 和打印插件完成全流程。 订单数据获取 通过…

vue实现打卡进度组件

vue实现打卡进度组件

Vue 打卡进度组件实现 核心思路 通过动态计算已完成天数与总天数的比例,结合 CSS 动画或过渡效果,实现进度条或日历形式的打卡可视化。 基础进度条实现 模板部分 <template&…