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

react如何获取执行进度信息

react如何获取执行进度信息

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

vue实现快递查询

vue实现快递查询

Vue 实现快递查询功能 需要准备的工具和资源 Vue 2/3 开发环境 快递查询 API(如快递鸟、快递100等) axios 或其他 HTTP 请求库 获取快递查询 API 注册快递查询 AP…

css制作快递单

css制作快递单

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

php实现快递进度

php实现快递进度

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

php怎么实现进度

php怎么实现进度

实现进度条的方法 使用PHP输出缓冲和刷新 PHP可以通过输出缓冲和手动刷新缓冲区来实现进度条效果。这种方法适用于命令行脚本或Web请求长时间处理时显示进度。 ob_start(); for ($i…