Actions
Issue #819
closed
RA
問題:特店重送會重新產生 STAN/RRN,缺少冪等鍵
Issue #819:
問題:特店重送會重新產生 STAN/RRN,缺少冪等鍵
Start date:
10/19/2026
Due date:
10/19/2026
% Done:
0%
Estimated time:
Story Points:
Description
RA Updated by Redmine Admin 6 days ago
開工(2026-10-20,#A-365):實作與測試已完成並全綠(詳結案 journal)。★ 本筆併記:Issue tracker 之工作流原漏 New → In Progress(D-023 當時僅補 CR/Task/Requirement)——已擴充 fix_workflow.rb 補齊(冪等),下筆即結案。
RA Updated by Redmine Admin 6 days ago
【完成+結案(2026-10-20,#A-365)】特店重送冪等已實作。
設計:可選 merchant_txn_id(1~64 位英數/底線/連字號;格式錯 → 400/12)。提供時:
- 同
(merchant_id, merchant_txn_id)於 TTL 內重送 → 回放原始 STAN/RRN 與完整結果(replayed=true、同auth_code)——不重新授權;冪等檢查置於產生 STAN/RRN 之前(重送必回「原始」識別碼)。 - 過窗(
IDEMPOTENCY_TTL_MS,預設 15 分鐘)→ 視為新交易(記 WARN,可觀測);快取 in-memory、上限 5000 筆(超限先清過期項)。 - 未帶鍵 → 行為完全不變。
測試:同鍵回放(同 STAN/RRN/auth_code)/不同鍵新交易/未帶鍵不啟用/格式錯 400/過窗視為新交易——共 5 例;全量 35 測 0 失敗。README(§3 功能特色/§18 限制)已同步:冪等為應用層重送鍵+in-memory 單實例,非傳輸層防重放。
(README 原列之「沒有交易重複沖銷(idempotency)機制」限制已依此實作解除並改寫。)
Actions