前置準備
- 至 愛快遞 註冊取得 API Key。
- 建立快遞公司代碼對照表(如
sto_express => zjs)。
核心程式碼 (ECShop 整合範例)
<?php
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
if ($order_id = intval($_REQUEST['id'])) {
// 1. 取得訂單物流資訊
$sql = "SELECT consignee, mobile, tel, tracking_sn, shipping_code, shipping_name
FROM " . $GLOBALS['ecs']->table('order_info') . " WHERE order_id = $order_id";
$order = $GLOBALS['db']->getRow($sql);
// 2. 映射快遞代碼
$map = [
'ems' => 'ems', 'ems2' => 'ems',
'sto_express' => 'zjs', 'sto_nopay' => 'zjs',
'zto' => 'zhongtong', 'sto' => 'shentong',
'yto' => 'yuantong', 'sf' => 'shunfeng',
'emssn' => 'ems', 'sf2' => 'shunfeng', 'yunda' => 'yunda'
];
$logistics_code = $map[$order['shipping_code']] ?? $order['shipping_code'];
// 3. 呼叫 API
$key = 'YOUR_API_KEY';
$url = "https://www.aikuaidi.cn/rest/?key=$key&order={$order['tracking_sn']}&id=$logistics_code&ord=asc&show=html";
$result = file_get_contents($url);
// 4. 輸出
echo "<div>收貨人: <strong>{$order['consignee']}</strong></div>";
echo "<div>電話: <strong>{$order['mobile']} / {$order['tel']}</strong></div>";
echo "<div>物流: <strong>{$order['shipping_name']}</strong></div>";
echo "<div>單號: <strong>{$order['tracking_sn']}</strong></div>";
echo $result; // API 直接回傳 HTML 片段
echo "<br><a href='$url' target='_blank'>查看原始回應</a>";
}
關鍵點說明
- API 回傳格式由
show=html 決定,亦可用 json 取得結構化資料自行排版。
- 編碼問題:若 API 回傳 GBK,需
iconv('gbk', 'utf-8', $result)。
- 錯誤處理:檢查
$result 是否包含錯誤訊息,記錄日誌便於除錯。
- 快取:同一單號短時間內重複查詢可快取結果,減少 API 呼叫次數。
其他主流物流 API
| 平台 | 特點 |
| 快遞鳥 | 支援 1000+ 家、即時推播、SDK 完善 |
| 聚合數據 | 多介面整合、計費靈活 |
| 官方開放平台 (順豐、EMS 等) | 最準確、需企業資質審核 |