# 開發說明

# 接口類型

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 認證授權。

image

# 訂單狀態回調

訂單狀態回調是透過生成及傳入簽名(Signature)實現。訂單狀態回調時,都會使用請求參數來生成簽名,故此每次請求的簽名都不同。以下將會透過一個例子,說明如何傳入所需參數。

# Step 1. 獲取 App ID 和 App Secret

Zeek 團隊提供 appidsecret_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 加入 appidsecret_keytimestamp,以 & 連接,生成 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