背景
最近進行網站後臺開發,需要實現物流的即時查詢, 爲了方便以後的業務需求,經過比較,最後選擇使用第三方快遞查詢接口服務商 ——【快遞鳥】
同時,在此進行整理,希望能幫到有需求的道友們,謝謝 ...
官方文檔: 快遞鳥 —— 即時查詢API
開發框架:ThinkPHP5.1.2
開發步驟
①. 前期準備
首先要進行快遞鳥賬號的註冊
快遞單號查詢接口_電子面單_APIKey授權申請-快遞鳥賬號註冊
快遞鳥API key免費註冊
並根據對方的要求,完善用戶申請。
然後,根據自己的需求,開通所需服務(如果只是進行物流信息的查詢,以當前業務查詢次數較少爲例):
②. 集成類的使用
首先需要登錄 快遞鳥 ,獲取賬號的 用戶ID和 API key
註冊完成後登入,進入到個人中心,這裏需要進行一個實名認證,按公司產品的類型進行一個選擇,展示頁面如下圖
快遞鳥實名認證
認證完成後在我的產品服務中選擇自己所需要的服務,當然對於初創型公司來說選擇免費版就夠了,等到業務做大時再選擇其他產品服務
還有就是在個人中心中如下圖所示,我們需要記住的是用戶ID,和API key(不要泄露),這將是我們進行接口調用時需要用到的,
對所提供源碼中的 集成類 BirdExpress.php,進行配置項的==替換操作==
然後
將集成類整合到你的項目框架,根據框架規則進行必要修改(框架不同規則自然多數不同,本人爲 ThinkPHP5.1.2)
下圖爲簡單的調用測試:
③. 核心處理方法源碼
首先,官方的代碼 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;
}
④. 效果展示截圖
通過上面核心源碼的展示,你應該會注意到
調用其方法,必須要傳入 ==快遞公司編碼== 和 ==物流單號== 這兩個參數
好在,官方提供了 快遞公司編碼, 所以,鄙人的設計思路如下:
- 根據官方提供的快遞公司編碼Excel表,取出其中的 "快遞公司"和"編碼"兩列數據存儲到本地數據表 ,如果使用的快遞數量較集中,可以自己建表輸入 ,如果是通用性的快遞使用,建議直接對excel錶轉化爲mysql(或其他數據表)存儲
如果需要進行 excel表的導入操作,可直接參考對應文章: ThinkPHP5.1 excel表的導入導出操作 (PHPExcel)
- 在後臺操作人員輸入快遞單號時 同時要求選擇快遞公司,獲得 "編碼" 從而保證,在數據表中,存儲的快遞單號唯一匹配到一個編碼,繼而方便後面進行快遞信息查詢時,可同時獲得所需的兩個參數。
源碼上傳 >>>
附錄
爲什麼我選擇使用快遞鳥API
首先,我擁有一個,測試物流單號:640041334612 (中通快遞),然後使用多個快遞查詢服務,效果如下:
通過比較發現:
- "快遞100" 沒有查到結果; "愛查快遞" 得出的結果並不是真實的物流信息
- "快遞網" 能查到快遞信息,但是詢問服務人員時知曉: 要麼網站上添加對方鏈接(我的管理後臺以及小程序、app是不能這樣玩的);要麼需要進行套餐定製,最低的大概一年1000 —— (前期網站是不需要那麼大的 查詢業務的,感覺浪費),而且,我不喜歡官網的設計風格(任性了)
- "快遞鳥",最讓我動心的是那個 "限3000次/天(即時查詢)" 是免費的 , 對於業務量前期不大的網站足夠使用,即便後期有需要,也可以直接進行套餐升級