QuoteRequests Security Hash

對應 legacy QuoteRequests::security_hash() action;支援 GET /quote_requests/security_hash/{quote_request_id}.json、query param 與 body param 三種 input 形狀。

這支 API 的責任很小:依 quote_request_id 找出 request owner,建立一筆 QuoteRequest 用途的 security_hashes,回傳 hash。

快速結論

  • 舊專案入口:get-lancer-php56/app/Plugin/Quotes/Controller/QuoteRequestsController.php::security_hash($id)
  • 新專案入口:Endpoint/V1/QuoteRequests.php::security_hash()
  • 認證:全域 API key
  • 主要資料表:quote_requests, security_hashes
  • 搬移狀態:已補上同路徑 action
  • 2026-05-12 正式機 get-lancer_access.log* 查詢:/quote_requests/security_hash.json 0 筆;同批查詢未看到 /quote_requests/... path 分布。

Request / Response

URL raw param

GET /quote_requests/security_hash/12345.json
X-PRO360-Rest-Api-Key: <api-key>

成功 response:

{
  "quote_request_id": "12345",
  "hash": "4f3c0d7e0c2e6c6a5c9e9b2b5d8a1f20"
}

Query param

GET /quote_requests/security_hash.json?quote_request_id=12345
X-PRO360-Rest-Api-Key: <api-key>

成功 response 同上。

Body param

POST /quote_requests/security_hash.json
X-PRO360-Rest-Api-Key: <api-key>
Content-Type: application/json
 
{
  "quote_request_id": 12345
}

成功 response 同上。

找不到 request

[]

舊流程

  1. 從 URL raw param 取得 id
  2. quote_requests.id = id 讀取 user_id
  3. 找到 request 時新增 security_hashes
  4. 回傳 quote_request_idhashquote_request_id 沿用 legacy 型別,回字串。
  5. 找不到 request 時回傳空陣列。

資料表關聯

規則資料表欄位
找 request ownerquote_requestsid, user_id
建立 hashsecurity_hasheshash, model, foreign_id, user_id

新專案實作

  • 實作位置:Endpoint/V1/QuoteRequests.php::security_hash()
  • quote_request_id 讀取順序:
    • body quote_request_id
    • query quote_request_id
    • URL raw param rawParams[0]
  • 建立 hash:
    • SecurityHash::insert($userId, 'QuoteRequest', $quoteRequestId)
  • Response:
    • quote_request_id 回傳字串,與 legacy $result['quote_request_id'] = $id 對齊
  • 找不到 request 時維持舊行為,回傳空陣列。

驗證重點

  • 有效 quote_request_id
    • response 包含字串型別 quote_request_id
    • response 包含非空 hash
    • security_hashes.model = 'QuoteRequest'
    • security_hashes.foreign_id = quote_request_id
    • security_hashes.user_id = quote_requests.user_id
  • 無效 quote_request_id
    • response 為空陣列
    • 不新增 security_hashes