☞ 背景
- 最近進行網站後臺開發,需要實現物流的即時查詢,發現之前集成的
快遞100物流查詢 API
——【PHP 快遞查詢源碼資源】 已經不能正常使用了; 爲了方便以後的業務需求,經過比較,最後選擇使用 第三方物流 ——【快遞鳥】 - 同時,在此進行整理,希望能幫到有需求的道友們,謝謝 …
官方文檔: 快遞鳥 —— 即時查詢API
開發框架:ThinkPHP5.1.2
- 【提示】(2020-02-09)
當前,免費版只可以支持三通物流信息的查詢,如果想查詢其他物流信息,需購買其他產品服務;同時升級購買後根據技術對接,尚需要進行必要參數的修整,針對京東、順豐物流注意CustomerName
參數的補充
☞ 開發步驟
①. 前期準備
- 首先要進行快遞鳥賬號的註冊
並根據對方的要求,完善用戶申請。
然後,根據自己的需求,開通所需服務(如果只是進行物流信息的查詢,以當前業務查詢次數較少爲例):
②. 集成類的使用
- 首先需要登錄 快遞鳥
獲取賬號的用戶ID
和API key
對所提供源碼中的 集成類BirdExpress.php
,進行配置項的替換操作
- 然後
將集成類整合到你的項目框架,根據框架規則進行必要修改(框架不同規則自然多數不同,本人爲ThinkPHP5.1.2
)
下圖爲簡單的調用測試:
- 注意【2019.06.10 補充】:
測試發現,線上的
Linux
系統下無法識別命名空間大小寫情況,在此建議namespace app\api\Controller
,都改成小寫字母
③. 核心處理方法源碼
- 首先,官方的代碼
demo
獲得的物流信息是正序展示的
爲了方便物流信息的倒序展示,我進行了對數組Traces
的反轉操作
/**
* 核心方法
* Json方式 查詢訂單物流軌跡
* @param string $ShipperCode 快遞公司編碼
* @param string $LogisticCode 物流單號
* @param int $arrayFlag 是否進行數組轉化標誌 默認0:否 1:轉化
* 參考規則舉例:
* $requestData = "{'OrderCode':'','ShipperCode':'ZTO','LogisticCode':'640041334612'}";
* @return result 包含即時物流信息的 Json數據
*/
public function getOrderTracesByJson($ShipperCode = "",$LogisticCode = "",$arrayFlag = 0)
{
$requestData = "{
'OrderCode':'',
'ShipperCode':'$ShipperCode',
'LogisticCode':'$LogisticCode'
}";
$postData = array(
'EBusinessID' => $this->EBusinessID,
'RequestType' => '1002',//接口指令1002
'RequestData' => urlencode($requestData),
'DataType' => '2',
);
$postData['DataSign'] = $this->encrypt($requestData, $this->AppKey);
$result = $this->sendPost($this->ReqURL, $postData);
//根據公司業務處理返回的信息......
if ($arrayFlag){
$result = json_decode($result,true);
//TODO 方便物流信息的倒序展示,進行數組反轉
$result['Traces'] = array_reverse($result['Traces']);
}
return $result;
}
④. 效果展示截圖
☞ [重要提示]:
代碼邏輯梳理,以及整體業務設計構化
- 通過上面核心源碼的展示,你應該會注意到
調用其方法,必須要傳入 快遞公司編碼 和 物流單號 這兩個參數
- 好在,官方提供了 快遞公司編碼, 所以,鄙人的設計思路如下:
1. 根據官方提供的快遞公司編碼Excel表
取出其中的 "快遞公司"和"編碼"兩列數據存儲到本地數據表
如果使用的快遞數量較集中,可以自己建表輸入
如果是通用性的快遞使用,建議直接對excel錶轉化爲mysql(或其他數據表)存儲
如果需要進行
excel
表的導入操作,可直接參考對應文章: ThinkPHP5.1 excel表的導入導出操作 (PHPExcel)
2. 在後臺操作人員輸入快遞單號時
同時要求選擇快遞公司,獲得 "編碼"
從而保證,在數據表中,存儲的快遞單號唯一匹配到一個編碼,繼而方便後面進行快遞信息查詢時,可同時獲得所需的兩個參數.
☞ >>> 源碼上傳 >>>
☞ 附錄
①. 個人請求
-
希望道友們能在這個【PHP 快遞查詢 - 源碼資源】下,給個評論,就說 :
"樓主表示:代碼已過期,不能正常使用了,請不要再下載了!"
—— 即便我刪掉了原先的博客,依然有人能通過其他路徑找到 !? 我也奇怪,爲什麼自己上傳的資源,CSDN 不允許刪除呢?
②. 爲什麼我選擇使用 快遞鳥API
首先,我擁有一個,測試物流單號:
640041334612 (中通快遞)
,然後使用多個快遞查詢服務,效果如下:
通過比較發現:
1. "快遞100" 沒有查到結果;
"愛查快遞" 得出的結果並不是真實的物流信息
2. "快遞網" 能查到快遞信息,但是詢問服務人員時知曉:
要麼網站上添加對方鏈接(我的管理後臺以及小程序、app是不能這樣玩的);
要麼需要進行套餐定製,最低的大概一年1000
—— (前期網站是不需要那麼大的 查詢業務的,感覺浪費),而且,我不喜歡官網的設計風格(任性了)
3. "快遞鳥",最讓我動心的是那個 "限3000次/天(即時查詢)" 是免費的
對於業務量前期不大的網站足夠使用,即便後期有需要,也可以直接進行套餐升級