Project

General

Profile

Actions

Issue #819

closed
RA

問題:特店重送會重新產生 STAN/RRN,缺少冪等鍵

Issue #819: 問題:特店重送會重新產生 STAN/RRN,缺少冪等鍵

Added by Redmine Admin 6 days ago. Updated 6 days ago.

Status:
Closed
Priority:
P3-Low
Assignee:
-
Category:
Operations
Start date:
10/19/2026
Due date:
10/19/2026
% Done:

0%

Estimated time:
Story Points:

Description

現象

NCCC 對每次進來的特店請求都重新產生 STAN 與 RRN,沒有使用特店端提供的
交易識別或重送鍵。

影響

同一筆交易若因網路錯誤重送,可能被視為兩筆新交易,造成重複授權與對帳困難。
目前 README 已列為限制,但沒有正式 Issue 追蹤。

建議

  • 定義 merchant_txn_id 或 idempotency_key。
  • 對重送請求回傳原始 STAN/RRN 與結果。
  • 保留重送窗口與過期策略。

Related issues 1 (0 open — 1 closed)

Related to Requirement #809: NCCC HTTPS JSON STIP Mock:建立可驗證的專業測試基準Closed10/19/202610/19/2026

Actions

RA Updated by Redmine Admin 6 days ago Actions #1

開工(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 Actions #2

【完成+結案(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

Also available in: PDF Atom