GUS Buy System Middleware - API 規格文件
本系統後端基於 FastAPI 架構,整合了 Appwrite JWT 驗證安全防線、Redis 高併發快取 以及 MariaDB 數據落地落地交易。
基礎全局規範
-
API 基礎路徑:
/api/v1 -
認證機制: 除系統健康檢查與金流 Webhook 外,其餘端點皆須於 Header 帶入 Appwrite 短期 JWT。
HTTP
Authorization: Bearer <Your_Appwrite_JWT>
1. 系統與產品目錄模組 (System & Products)
1.1 獲取商店全域配置
-
方法/端點:
GET /api/v1/products/config -
說明: 獲取詢價/電商系統初始化的全域基礎配置(包含產品分類、首頁輪播廣告 Banner 配置)。
-
請求 Format: 無
-
回應 Format (JSON):
JSON
{ "categories": [ { "id": "all", "name": "全部商品", "icon": "Grid" }, { "id": "lto", "name": "LTO 鈦酸鋰系列", "icon": "BatteryCharging" } ], "banners": [ { "id": "b1", "title": "格斯科技 LTO 技術革新", "subtitle": "高安全性、超長循環壽命的鈦酸鋰電池解決方案", "image": "https://...", "link": "/category/lto" } ] }
1.2 獲取產品清單
-
方法/端點:
GET /api/v1/products -
說明: 獲取 B2B / 儲能商品目錄。支援透過 Query String 篩選分類。
-
參數 (Query):
category(字串, 選填, 預設為"all") -
回應 Format (JSON):
JSON
[ { "id": "gus-lto-60ah", "name": "GUS LTO 鈦酸鋰軟包電芯 (60Ah)", "description": "具備 30,000 次超高循環壽命...", "price": 4500.0, "image": "https://...", "category": "lto", "specifications": { "Capacity": "60Ah", "Voltage": "2.4V", "Cycle Life": ">30000" } } ]
1.3 獲取單一產品詳情
-
方法/端點:
GET /api/v1/products/{product_id} -
說明: 依產品 ID 查詢詳細規格。
-
錯誤碼:
404 Not Found(當產品 ID 不存在時) -
回應 Format (JSON): 同 1.2 的單一物件結構。
2. 庫存管理模組 (Stock Management)
2.1 庫存快取預熱同步
-
方法/端點:
POST /api/v1/stock/sync -
說明: 【系統維護/後台專用】讀取 MariaDB 的真實實體庫存,透過 Pipeline 批次強行刷新至 Redis 快取。用於系統重啟、故障恢復或人工大盤點。
-
請求 Format: 無
-
回應 Format (JSON):
JSON
{ "status": "success", "message": "Successfully synced 4 products to cache" }
2.2 單一商品庫存異動 (進貨入庫/調減)
-
方法/端點:
PATCH /api/v1/stock/{product_id} -
說明: 供後台或工廠管理系統手動調整庫存。會優先變更 MariaDB 實體表,成功後利用
incrby同步累加 Redis。 -
請求 Format (JSON):
JSON
{ "increment_qty": 50 }(註:
increment_qty支援正數代表進貨,負數代表庫存銷退或扣減) -
回應 Format (JSON):
JSON
{ "product_id": "gus-lto-60ah", "stock_qty": 150, "reserved_qty": 10, "updated_at": "2026-07-07T11:00:00" }
2.3 查詢 MariaDB 真實庫存狀態
-
方法/端點:
GET /api/v1/stock/{product_id} -
說明: 查詢目前資料庫落地的現貨庫存與鎖定預留庫存。
-
回應 Format (JSON): 同 2.2 的回應結構。
3. 訂單與詢價模組 (Orders & Inquiry)
3.1 傳統 B2B 意向詢價單提交
-
方法/端點:
POST /api/v1/orders/inquiry -
說明: 大宗企業採購意向單。此端點不走 Redis 秒殺鎖與線上金流,僅作為後台追蹤。
-
請求 Format (JSON):
JSON
{ "items": [ { "productId": "gus-ess-rack-100kwh", "finalQuantity": 2, "negotiatedPrice": 1200000.0 } ] } -
回應 Format (JSON):
JSON
{ "success": true, "message": "Inquiry submitted successfully" }
3.2 高併發安全下單端點
-
方法/端點:
POST /api/v1/orders -
說明: 核心高併發下單。優先進入 Redis 進行原子庫存扣減(第一防線),成功後透過交易雙寫寫入遠端 Appwrite 與本機 MariaDB(現貨庫存扣除,轉入鎖定庫存
reserved_qty)。 -
業務分流邏輯:
-
總金額大於等於 10 萬,或帶有
project_id➔ 狀態轉為PM_ESTIMATING(專案估價審核中)。 -
一般零售/小額採購 ➔ 狀態轉為
PENDING_PAY(一般待付款,可跳轉金流)。
-
-
請求 Format (JSON):
JSON
{ "project_id": "PRJ-2026-LTO-TAIPEI", "total_amount": "1250000.00", "items": [ { "product_id": "gus-ess-rack-100kwh", "quantity": 1 } ] } -
回應 Format (JSON):
JSON
{ "status": "success", "order_id": "appwrite_generated_doc_id_123", "state": "PM_ESTIMATING" }
4. 外部金流 Webhook 模組 (Payment Webhooks)
4.1 綠界金流非同步交易結果回傳
-
方法/端點:
POST /api/webhooks/ecpay/callback -
說明: 接收綠界金流付款成功的通知。後端會在此執行 CheckMacValue 簽章驗證 與 Redis 10秒等冪性分散式鎖,防止重複銷帳。扣款成功(
RtnCode == 1)時,本機 MariaDB 與遠端 Appwrite 的狀態會同步變更為PAID,並清除預扣鎖定庫存,寫入發票號碼。 -
請求 Format (application/x-www-form-urlencoded):
Code snippet
MerchantID=2000132 &MerchantTradeNo=appwrite_generated_doc_id_123x171234 &RtnCode=1 &RtnMsg=交易成功 &TradeNo=ECPAY202607079999 &TradeAmt=4500 &PaymentDate=2026/07/07 11:05:00 &CheckMacValue=SHA256_ENCRYPTED_STRING_HERE &SimulatePaid=0 -
回應 Format (純文字
text/plain):-
處理成功(不論是首次處理成功,或是重複打入被等冪性攔截):回傳
1|OK(通知綠界停止補發) -
驗章或系統失敗:回傳
0|ErrorMessage(通知綠界幾分鐘後重發)
-