当前位置:首页 > 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";
        }
    }
}

数据库存储快递信息

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

// 存储查询结果
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文档中的代码一致

php实现快递进度

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

相关文章

vue实现文件进度

vue实现文件进度

Vue 实现文件上传进度 使用 Vue 实现文件上传进度可以通过结合 axios 或原生 XMLHttpRequest 的进度事件来实现。以下是两种常见方法: 使用 axios 上传文件并显…

vue实现环形进度组件

vue实现环形进度组件

实现环形进度组件 环形进度组件可以通过SVG或Canvas实现,以下是基于SVG的实现方法: 定义组件模板 <template> <div class="circle-p…

vue实现进度圈效果

vue实现进度圈效果

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

vue实现视频进度加载

vue实现视频进度加载

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

vue实现类似淘宝快递

vue实现类似淘宝快递

Vue 实现类似淘宝快递物流跟踪功能 实现类似淘宝的快递物流跟踪功能需要结合前端展示和后端数据交互。以下是关键步骤和代码示例: 数据准备与接口设计 后端需提供物流信息接口,返回数据结构示例:…

react如何获取执行进度信息

react如何获取执行进度信息

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