当前位置:首页 > PHP

php实现快递进度

2026-01-29 04:04:02PHP

实现快递进度查询的PHP方法

使用快递鸟API

快递鸟提供物流查询API接口,支持多家快递公司。需注册账号获取API Key和商户ID。

// 配置参数
$appKey = '你的AppKey';
$ebusinessID = '你的商户ID';
$requestData = json_encode([
    'ShipperCode' => '快递公司编码',
    'LogisticCode' => '快递单号'
]);

// 生成数据签名
$dataSign = urlencode(base64_encode(md5($requestData . $appKey)));

// 请求API
$url = "http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
$postData = [
    'RequestData' => urlencode($requestData),
    'EBusinessID' => $ebusinessID,
    'RequestType' => '1002',
    'DataSign' => $dataSign,
    'DataType' => '2'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

// 处理返回结果
$resultArray = json_decode($result, true);
if(isset($resultArray['Traces'])) {
    foreach($resultArray['Traces'] as $trace) {
        echo $trace['AcceptTime'] . ': ' . $trace['AcceptStation'] . "\n";
    }
}

使用快递100API

快递100也提供物流查询接口,需申请API Key。

$customer = '你的客户编码';
$key = '你的授权Key';
$com = '快递公司代码';
$num = '快递单号';

$url = "http://api.kuaidi100.com/api?id={$customer}&com={$com}&nu={$num}&show=0&muti=1&order=desc";
$sign = md5($url . $key);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . '&sign=' . $sign);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

$result = json_decode($output, true);
if($result['message'] == 'ok') {
    foreach($result['data'] as $item) {
        echo $item['time'] . ': ' . $item['context'] . "\n";
    }
}

自行解析快递公司官网

对于不支持API的快递公司,可通过爬取官网信息实现。

function querySFExpress($trackingNumber) {
    $url = "https://www.sf-express.com/sf-service-owf-web/order/orderTrack?lang=sc&region=cn&trackingNumber={$trackingNumber}";

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

    $data = json_decode($response, true);
    if(isset($data['data']['routes'])) {
        foreach($data['data']['routes'] as $route) {
            echo $route['acceptTime'] . ': ' . $route['acceptAddress'] . ' - ' . $route['remark'] . "\n";
        }
    }
}

数据库存储快递信息

对于频繁查询的快递单号,建议缓存结果到数据库。

php实现快递进度

// 存储查询结果
function saveTrackingInfo($trackingNumber, $carrier, $data) {
    $pdo = new PDO('mysql:host=localhost;dbname=courier', 'username', 'password');
    $stmt = $pdo->prepare("REPLACE INTO tracking_info (tracking_number, carrier, data, last_updated) VALUES (?, ?, ?, NOW())");
    $stmt->execute([$trackingNumber, $carrier, json_encode($data)]);
}

// 从数据库获取
function getTrackingInfo($trackingNumber) {
    $pdo = new PDO('mysql:host=localhost;dbname=courier', 'username', 'password');
    $stmt = $pdo->prepare("SELECT data FROM tracking_info WHERE tracking_number = ? AND last_updated > DATE_SUB(NOW(), INTERVAL 1 HOUR)");
    $stmt->execute([$trackingNumber]);
    return $stmt->fetchColumn();
}

注意事项

  • 所有API都需要注册获取授权密钥
  • 注意处理API调用频率限制
  • 建议对查询结果进行缓存,避免频繁请求
  • 错误处理应包括网络超时、API限制等情况
  • 快递公司编码需与API文档中的代码一致

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

相关文章

vue实现页面加载进度

vue实现页面加载进度

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

react如何获取执行进度信息

react如何获取执行进度信息

获取执行进度的方法 在React中获取执行进度信息通常涉及异步操作(如数据加载、文件上传等)的状态跟踪。以下是几种常见实现方式: 使用自定义状态管理 通过React的useState和useEffe…

php如何实现下载进度

php如何实现下载进度

在PHP中实现下载进度显示需要结合服务器端和客户端的协作,以下是几种常见方法: 使用输出缓冲和分块传输 通过分块发送文件数据并计算进度: $file = 'large_file.zip'; $fi…

php实现快递进度

php实现快递进度

PHP实现快递进度查询 方法一:使用快递100 API 快递100提供了免费的快递查询API接口,可以通过PHP调用获取快递进度信息。 注册快递100开发者账号,获取API Key。 使用PHP的c…

php下载进度实现

php下载进度实现

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

php 实现上传进度

php 实现上传进度

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