# 開發說明
# 接口類型
Open API 都是以 HTTPS 協議運作。 接口分為 請求接口 和 回調接口 兩種。
# 請求接口
對接方系統請求 Zeek 平台的接口.
# 回調接口
透過回調接口,Zeek 平台主動向對接方系統推送信息,例如訂單狀態更新。回調接口的URL由開發者提供。
# 規範
- 採用 HTTPS 協議
- 數據編碼採用
UTF-8
- 接口請求 (API request) 和返回 (API response) 的 Payload 數據格式都是 JSON。
# API URL
# Sandbox 環境
開發者可以在 Sandbox 環境進行 API 對接及測試。
Zone | URL | Region |
---|---|---|
AP1 | https://open-api.ap1-sandbox.zeek.one/parcel/v1.0 | 香港 |
AP2 | https://open-api.ap2-sandbox.zeek.one/parcel/v1.0 | 新加坡、泰國、越南、馬來西亞 |
- 我們提供額外開發環境給定製化對接的客戶,詳情請與我們團隊聯絡。
# Release 環境
Release 環境是正式運作的環境。
Zone | URL | Region |
---|---|---|
AP1 | https://ap1-open-api.zeek.one/parcel/v1.0 | 香港 |
AP2 | https://ap2-open-api.zeek.one/parcel/v1.0 | 新加坡、泰國、越南、馬來西亞 |
# API Request
接口請求 (API request) 的 Curl 例子:
curl --location --request POST 'https://ap1-open-api.zeek.one/parcel/v1.0/vas' \
--header 'Content-Type: application/json;charset=UTF-8' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' \
--header 'KS-Region: SG' \
--header 'KS-Lang: en' \
--header 'KS-Client-Request-Id: f058ebd6-02f7-4d3f-942e-904344e8cde5' \
--data-raw '{
"merchant_id": "1111111",
"product_code": "DASH2HR"
}'
# HTTP Header
在接口請求 (API request) 時,需要傳入以下的 HTTP Header。
# Content-Type
請傳入 application/json;charset=UTF-8
,所有接口請求都是以 UTF-8
編碼及 JSON 格式進行
# Authorization
在請求接口時,需要在 Authorization
header 傳入 access token,才能獲得 Zeek 平台授權使用該接口。請參考 接口授權。
# KS-Region
傳入使用服務的地區:
地區 | 值 |
---|---|
香港 | HK |
新加坡 | SG |
越南 | 胡志明市:SGN 河內: HAN |
馬來西亞 | 吉隆坡: KUL |
泰國 | 曼谷:BKK |
# KS-Lang
請根據地區傳入語言:
地區 | KS-Lang 值 |
---|---|
香港 | 繁體中文:zh-HK 英文: en |
新加坡 | 英文:en |
越南 | 越南文:vi 英文: en |
馬來西亞 | 馬來文:ms 英文: en |
泰國 | 泰文:th 英文: en |
# KS-Client-Request-Id
在每次請求時,建議開發都傳入一個 UUID 到 KS-Client-Request-Id
Header, 方便在測試排查時,讓開發者和 Zeek 團隊辨認正在請求的是哪一個。 UUID 的例子是 f058ebd6-02f7-4d3f-942e-904344e8cde5
。
# API Response
# HTTP 狀態碼
接口返回 (HTTP response) 時,會使用以下 HTTP 狀態碼,反饋接口請求結果:
- 200 OK
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 500 Internal Server Error
# HTTP Header
在接口返回包括以下的 HTTP header:
Header | 例子 | 說明 |
---|---|---|
KS-Api-Version | 1.0 | 版本號 |
KS-Client-Request-Id | f058ebd6-02f7-4d3f-942e-904344e8cde5 | 開發者在請求時傳入的 KS-Client-Request-Id |
# Payload 格式
名稱 | 類型 | 說明 | 備註 |
---|---|---|---|
error | int | 錯誤碼 | - 調用成功時返回 0 .- 其他錯誤碼請參考錯誤碼列表。 |
data | object | 返回結果數據 | - 只有在調用成功時返回。 - 請參考各接口的返回數據格式 |
error_msg | string | 錯誤訊息文字 | - 只有在調用失敗時返回。 |
成功調用例子:
{
"error": 0,
"data": {
"token_type": "Bearer",
"access_token": "xxxxxxxxxxxxxxxxxxxxxxx",
"expires_in": 86400,
"scope": "delivery"
}
}
失敗調用例子:
{
"error": 261004,
"err_msg": "Incorrect parameters"
}
# 時區
所有接口請求或返回的時間值,其代表時區都需要和傳入的 region
參數一致。例如當 region="HK"
時,則代表正在傳入 UTC+8 時區的時間值。
# 地理位置座標
座標數據使用的格式是 "緯度,經度",例如 22.285944,114.158177
。
# 接口授權
# API請求
Open API 使用 OAuth 的 Client credentials flow 進行接口授權。當中涉及以下幾步:
- 第 1 步:開發者從 Zeek 團隊獲得 AppId 和 AppSecret 。
- 第 2 步:對接方系統調用 PA-API-1.1 獲取 Access Token 接口 以 AppId 和 AppSecret 獲取 Access token。Access token 的有效為 24 小時。
- 第 3 步:開發者在請求其他接口時,在 HTTP Header 加上
Authorization: Bearer [Access token]
,Zeek 平台會利用 Access token 認證授權。
# 訂單狀態回調
訂單狀態回調是透過生成及傳入簽名(Signature)實現。訂單狀態回調時,都會使用請求參數來生成簽名,故此每次請求的簽名都不同。以下將會透過一個例子,說明如何傳入所需參數。
# Step 1. 獲取 App ID 和 App Secret
Zeek 團隊提供 appid
和 secret_key
給開發者,並將使用這兩個參數生成簽名(Signature),用作接口授權,故此,請妥善及保密保管。
參數 | 例子 |
---|---|
appid | 10000001 |
secret_key | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
# Step 2. 生成 request_param_string
假如,原請求數據是
{
"order_id": "DA-A-12345",
"merchant_id": "123",
"client": {
"order_id": "11111111",
"shipment_code": "22222222"
},
"status": {
"code": "9015",
"name": "Delivery in progress",
"lastmodify": "2022-10-10 16:34:38"
}
}
在串接前,先把參數值為非數字和字符串的參數去除。
{
"order_id": "DA-A-12345",
"merchant_id": "123"
}
以數據的鍵名 (key) 按字母升序排列:
{
"merchant_id": "123",
"order_id": "DA-A-12345"
}
把每一個參數鍵(key)和值(value),以=
連接,然後順序以&
連接每一個參數,獲得 request_param_string
:
參數 | 例子 |
---|---|
appid | 10000001 |
secret_key | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
request_param_string | merchant_id=123&order_id=DA-A-12345 |
# Step 3. 生成 pre_signature
在 request_param_string
加入 appid
、secret_key
、timestamp
,以 &
連接,生成 pre_signature
:
參數 | 例子 |
---|---|
appid | 10000001 |
secret_key | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
timestamp | 1665390878 |
request_param_string | merchant_id=123&order_id=DA-A-12345 |
pre_signature | merchant_id=123&order_id=DA-A-12345&10000001&da39a3ee5e6b4b0d3255bfef95601890afd80709&1665390878 |
# Step 4. 生成簽名
用 MD5 加密得到 signature
(簽名)
參數 | 例子 |
---|---|
appid | 10000001 |
secret_key | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
timestamp | 1665390878 |
request_param_string | merchant_id=123&order_id=DA-A-12345 |
pre_signature | merchant_id=123&order_id=DA-A-12345&10000001&da39a3ee5e6b4b0d3255bfef95601890afd80709&1665390878 |
signature | c6f9dc83a8b8be1b9cdfb63442f0730b |
# Step 5. 把簽名傳入請求參數
{
"auth": {
"appid": 10000001,
"timestamp": 1665390878,
"signature": "c6f9dc83a8b8be1b9cdfb63442f0730b"
},
"data": {
"order_id": "DA-A-12345",
"merchant_id": "123",
"client": {
"order_id": "11111111",
"shipment_code": "22222222"
},
"status": {
"code": "9015",
"name": "Delivery in progress",
"lastmodify": "2022-10-10 16:34:38"
}
}
}
# 錯誤碼
錯誤碼 | 說明 |
---|---|
400190000001 | 綜合錯誤集合組 |
400180062 | json格式不正確 |
400120134 | 地址為空 |
400120131 | 電話錯誤 |
400120135 | 地址錯誤 |
400120037 | 經度為空 |
400120038 | 經度錯誤 |
400120040 | 緯度錯誤 |
4001128032 | 地址簿id有誤 |
400120313 | 小費錯誤 |
4001128083 | cod費用格式錯誤 |
4001128071 | 獲取訂單內容失敗 |
4001128090 | 當前下單方式工種必填 |
400190001027 | 座標(可能為未支援區域) |
400190001033 | 時效類型錯誤 |
400190001042 | 該訂單不支持當前工種或地區,計費失敗 |
400190000002 | 當前工種不支持當前工作 |
400190001000 | 此業務不支持此工種 |
400190001005 | 小費如填寫,必需大於0 |
400190001006 | 小費必須為數值 |
400190001013 | 工種必須填寫 |
400190001035 | 日期與時間格式不正確 |
400190001036 | 下單日期時間不能早於當前時間 |
400190001031 | 物品類型不存在 |
400190001032 | 物品大小尺寸不存在 |
400190001043 | 指定隧道不存在於可選隧道內,計費失敗 |
400190001044 | 自動取消訂單時間類型或日期格式錯誤 |
400190001020 | 必須輸入起點地區 |
400190001021 | 必須輸入結束地區 |
4001128003 | 起點地址簿id有誤 |
4001128002 | 發件人電話錯誤 |
4001128005 | 發件人資料錯誤 |
4001128004 | 起點地址錯誤 |
4001128006 | 發件人經度有誤 |
4001128007 | 發件人緯度有誤 |
400110062 | 國家區號錯誤 |
4001128009 | 終點地址簿id有誤 |
4001128014 | 附近/區域類型有誤 |
4001128059 | 終點地址類型不存在 |
4001128010 | 終點地址錯誤 |
4001128012 | 收件人經度有誤 |
4001128013 | 收件人座標(緯度)錯誤 |
4001128011 | 收件人資料錯誤 |
4001128008 | 收件人電話有誤 |
400110062 | 國家區號錯誤 |
400190001052 | 超大件需在地面交收,不能勾選「沒有升降機」的選項 |
400190001045 | 隧道code不存在 |
400193000001 | 下單聯絡人名稱必填 |
400193000002 | 下單聯絡人手機必填 |
400193000005 | 加載計算繁忙 |
400193000006 | 遠程調用繁忙 |
400193000008 | VAS不可用 |
400193000009 | VAS超出範圍 |
400193000022 | 自定義取消時間 不能 超過 開始工作時間後的24小時 |
4001340000 | 參數錯誤 |
400120217 | 內容錯誤 |
4001260300 | 數據錯誤 |
4001280009 | 臨時主單不存在 |
400120212 | 保存資料失敗 |
400180070 | 請選擇重復下單原因 |
4001260300 | 數據錯誤 |
4001260061 | 請勿重復提交申請 |
400120212 | 保存資料失敗 |
400180056 | 訂單不存在 |
40011 | 請重新登入 |
400180062 | json格式不正確 |
4001310001 | 業務ID錯誤 |
4001310002 | 產品code錯誤 |
400120134 | 地址為空 |
400190001032 | 物品大小尺寸不存在 |
50006 | Token 錯誤 |
40001 | Invalid parameters |
40101 | Unauthorized (Invalide access_token, merchant_id, client_id or client_secret) |
40301 | Access token is expired |
40302 | THe merchant_id is not authorized |
40303 | You can only create or cancel the same order once in 60sec |
50001 | Internal server error |
50002 | Internal server error |
50003 | Internal server error |
50004 | Internal server error |
50005 | Internal server error |
50006 | Internal server error |