Files
star-cloud/.agents/skills/api-technical-specs/SKILL.md
sky121113 8f008ffb61
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 52s
[FEAT] 實作 B014 機台參數下載 API 與 B000 登入認證強化
1. 強化 B000 登入接口:驗證成功後回傳 Sanctum Token 供後續初始化使用。
2. 實作 B014 (getSettings) API:整合機台、金流與發票設定,並映射至 Android App 預期欄位。
3. 強化安全性:B014 API 掛載 auth:sanctum 並執行 RBAC 權限檢查。
4. 更新 API 說明文件 (iot-spec.md, api-docs.php) 及技術規範 (SKILL.md)。
2026-04-13 17:04:52 +08:00

11 KiB
Raw Blame History

name, description
name description
API 技術規格與通訊協議規範 本技能規範定義了 Star Cloud 系統中所有機台 (IoT) 與後端 (Cloud) 通訊的 API 細節、參數命名規則、狀態代碼對照與認證機制,作為系統開發的唯一規格來源。

API 技術規格與通訊協議規範 (API Technical Specs)

本文件集中定義所有機台與雲端通訊的 API 規格,確保硬體端與軟體端在資料交換格式與業務定義上保持完全一致。

1. 核心命名原則

  • 語意化優先:捨棄舊版 M_ 前綴,統一使用 snake_case (如 firmware_version)。
  • 類型嚴格:文件定義的類型 (Integer, Float, String) 必須在後端 Model 與前端文件中心嚴格遵守。

2. 身份認證 (Authentication)

本系統採用兩階段認證模式:

2.1 維運人員認證 (User Authentication)

  • 核發端點B000 (登入)。
  • 使用端點B014 (參數下載)。
  • 方式:使用 Laravel Sanctum 核發之 User Token
  • HeaderAuthorization: Bearer <user_token>

2.2 機台通訊認證 (Machine Authentication)

  • 適用 APIB010, B012, B013, B600 等後續通訊。
  • 方式:使用機台專屬之 api_token
  • HeaderAuthorization: Bearer <api_token>

3. 機台核心 API (IoT Endpoints)

3.1 B000: 機台本地管理員同步登入

用於機台 Android 端維護人員登入與進入設定頁。此 API 無狀態,且為例外不強制檢查 Bearer Token 的端點。

  • URL: POST /api/v1/app/admin/login/B000
  • Request Body:
參數 類型 必填 說明 範例
machine String 機台編號 (serial_no) M-001
Su_Account String 系統管理員或公司管理員帳號 admin
Su_Password String 密碼 password123
ip String 用戶端 IP (相容舊版) 192.168.1.100
type String 裝置類型代碼 (相容舊版) 2
  • Response Body:

Important

為了相容 Java APP 現有邏輯,這裡嚴格規定成功必須回傳字串 Success。

參數 類型 說明 範例
message String 驗證結果 (Success 或 Failed) Success
token String 臨時身份認證 Token (用於 B014) 1

3.2 B005: 廣告清單同步

用於機台端獲取目前應播放的廣告檔案 URL 清單。

  • URL: GET /api/v1/app/machine/ad/B005

  • Request Body: 無 (GET 請求)

  • Response Body:

參數 類型 說明 範例
success Boolean 請求是否成功 true
code Integer 內部業務狀態碼 200
data Array 廣告物件陣列 [{"t070v04": "https://..."}]

data 陣列內部欄位:

  • t070v01: 廣告名稱 (Name)
  • t070v02: 播放長度 (Duration) — 秒數,若後台未設定,預設為 15 秒。
  • t070v03: 廣告位置 (Position/Flag) — (3: 待機廣告, 1: 販賣頁, 2: 來店禮)。
  • t070v04: 廣告 URL。
  • t070v05: 播放順位 (Sort Order)。

3.3 B009: 貨道庫存即時回報 (Supplementary Report)

當維修或補貨人員在機台端完成操作後,將目前的貨道實體狀態同步回雲端。

B009 權限驗證邏輯 (RBAC Compliance)

系統會依據 account 欄位進行三層式權限核查:

  1. 系統層 (System Admin):當 company_id 為 null 時,具備全局管理權限,直接放行。
  2. 公司層 (Company Admin):當 is_admin 為 true 時,檢查機台的 company_id 是否與該帳號一致。
  3. 人員層 (Operator/User):當帳號僅為一般人員時,檢查 machine_user 授權表,確認該帳號有被分配至此機台。
  • URL: PUT /api/v1/app/products/supplementary/B009
  • Request Body:
參數 類型 必填 說明 範例
account String 操作人員帳號 0999123456
data Array 貨道數據陣列 [{"tid":"1", "t060v00":"1", "num":"10"}]
  • data 陣列內部欄位:
欄位 類型 說明 範例
tid Integer 貨道編號 (Slot No) 1
t060v00 String 商品資料庫 ID (或是 Barcode) "1"
num Integer 實體剩餘庫存數量 10
type Integer 貨道物理類型 (1: 履帶, 2: 彈簧)。若未提供,預設為 1。 1

Tip

自動化上限同步邏輯 當後端收到 B009 時,會根據 type 自動從該商品的配置中選取 spring_limit 或 track_limit 並自動更新該貨道的 max_stock 欄位。機台端無需手動計算上限。

  • Response Body (Success 200):
參數 類型 說明 範例
success Boolean 同步是否成功 true
code Integer 內部業務狀態碼 200
message String 回應訊息 Slot report synchronized success
status String 固定回傳 49 代表同步完成 "49"

3.4 B010: 心跳上報與狀態同步

用於確認機台在線狀態、更新感測數據、提交事件日誌並獲取雲端指令。

  • URL: POST /api/v1/app/machine/status/B010
  • Authentication: Bearer Token (Header)
  • Request Body:
參數 類型 必填 說明 範例
current_page Integer 當前頁面代碼 (見下表) 1
firmware_version String 韌體版本號 1.0.5
model String 機台型號 STAR-V1
temperature Float 環境溫度 25.5
door_status Integer 門狀態 (0:關 / 1:開) 0
log String 事件日誌簡述 Door opened
log_level String info, warn, error info
log_payload Object 額外日誌 JSON 對象 {"code":500}
  • Response Body:
參數 類型 說明 範例
success Boolean 請求是否處理成功 true
code Integer 內部業務狀態碼 200
message String 回應訊息 OK
status String 雲端指令代碼 (見下表) 49

B010 代碼對照表

頁面代碼 (current_page)

  • 0: 離線 / 1: 主頁面 / 2: 販賣頁 / 3: 管理頁
  • 4: 補貨頁 / 5: 教學頁 / 6: 購買中 / 7: 鎖定頁
  • 60: 出貨成功 / 61: 貨道測試 / 62: 付款選擇
  • 63: 等待付款 / 64: 出貨 / 65: 收據簽單
  • 66: 通行碼 / 67: 取貨碼 / 68: 訊息顯示
  • 69: 取消購買 / 610: 購買結束 / 611: 來店禮
  • 612: 出貨失敗

雲端指令代碼 (status)

  • 49: reload B017 (貨道同步)
  • 51: reboot (重啟系統)
  • 60: reboot card machine (刷卡機重啟)
  • 61: checkout (觸發結帳)
  • 70: unlock (解鎖)
  • 71: lock (鎖定)
  • 85: reload B0552 (遠端出貨)

3.5 B012: 商品配置與商品主檔同步 (Unified Sync)

用於機台端獲取目前所有可販售商品的詳細配置。App 端應依據呼叫的方法決定數據處理方式。

  • URL: GET|PATCH /api/v1/app/machine/products/B012
  • Authentication: Bearer Token (Header)
  • Request Body: 無 (由 Token 自動識別機台)

運作邏輯 (Client-side Logic):

  • GET:執行 全量同步。App 應於收到成功回應後,先執行 deleteAll() 再進行 insertAll() 以確保與伺服器完全一致。
  • PATCH:執行 增量更新。App 於收到成功回應後,僅對記憶體中的既存商品進行欄位值覆蓋 (Patching)。
欄位 型別 說明 範例
t060v00 String 商品資料庫 ID "1"
t060v01 String 商品名稱 可口可樂 330ml
t060v01_en String 英文名稱 Coca Cola
t060v01_jp String 日文名稱 コカコーラ
t060v03 String 商品規格/簡述 Cold Drink
t060v06 String 圖片 URL https://.../coke.png
t060v09 Float 標準零售價 25.0
t060v11 Integer 貨道庫存上限 (預設履帶) 10
t060v30 Float 會員價 20.0
t063v03 Float 本機銷售價格 (同定價) 25.0
t060v40 String 行銷計畫 (Marketing Plan) Buy 1 Get 1
t060v41 String 物料編碼 (Material Code) SKU-001
spring_limit Integer 彈簧貨道上限 (建議使用此欄位) 10
track_limit Integer 履帶貨道上限 (建議使用此欄位) 15

3.6 B013: 機台故障與異常狀態上報 (Error/Status Report)

用於接收機台發出的即時硬體狀態代碼(如卡貨、門未關),並自動由雲端後端翻譯為易讀日誌。

  • URL: POST /api/v1/app/machine/error/B013
  • Authentication: Bearer Token (Header)
  • Request Body:
參數 類型 必填 說明 範例
tid Integer 涉及之貨道編號 (Slot No) 12
error_code String 硬體狀態代碼 (4 位 16 進位) "0403"
  • 回應 (Success 202):
參數 類型 說明 範例
success Boolean 請求已接收 true
code Integer 200 200

B013 硬體代碼對照表 (由 MachineService 自動翻譯)

代碼 英文 Key (i18n) 級別 範例繁中翻譯
0402 Dispense successful info 出貨成功
0403 Slot jammed error 貨道卡貨 (重大異常)
0202 Product empty warning 貨道缺貨
0412 Elevator rise error error 昇降機上升異常
0415 Pickup door error error 取貨門異常
5402 Pickup door not closed warning 取貨門未關 (警告)
5403 Elevator failure error 昇降系統故障

3.7 B014: 機台參數與金鑰下載 (Config Download)

用於機台引導階段 (Provisioning),向雲端請求支付金鑰、發票設定及機台正式 API Token。

  • URL: POST /api/v1/app/machine/setting/B014
  • Authentication: User Token (Sanctum Header)
  • Request Body:
參數 類型 必填 說明 範例
machine String 機台編號 (serial_no) M-001
  • Response Body (Success 200):
欄位 (Key) 說明 備註
t050v01 機台序號 即 machine_id
api_token 機台正式 Token 初始化後應存於本地,後續 API 認證用
t050v41 玉山特店編號 ESUN Merchant ID
t050v42 玉山終端編號 ESUN Terminal ID
t050v43 玉山 Hash Key ESUN Hash
t050v34 發票特店 ID Invoice Merchant ID
t050v35 發票 Hash Key Invoice Key
t050v36 發票 Hash IV Invoice IV
TP_APP_ID 趨勢支付 AppID TrendPay ID
TP_APP_KEY 趨勢支付 Key TrendPay Key

Caution

安全性規範B014 會回傳敏感金鑰與正式 Token背景必須強制進行 RBAC 校驗。只有當前登入的人員具備該機台管理權限時,後端才允許發放資料。