⚡ 自動儲值設定 — 功能流程
涵蓋「用戶設定流程」與「後端自動觸發流程」兩段,搭配 UI 模擬與業務規則說明。
💡
用戶進入 帳號設定 › 使用額度 › API 生成點數 區塊,設定自動購買方案與觸發門檻後儲存啟用。
GET API 生成點數餘額
顯示剩餘點數、現有設定值
❌ 未主動購買過 API 點數
→ Toast「請先購買 API 點數,即可開啟自動儲值」
❌ 未綁定信用卡
→ 彈出「新增付款資訊」Modal → 導向 ECPay 綁卡
選擇自動購買方案
方案 A(9 萬點)/ 方案 B(75 萬點)/ 方案 C(300 萬點)
設定觸發門檻
上限 = 所選方案點數 ÷ 10(如方案 A → 上限 9,000 點)
選擇方案後自動帶入預設門檻
預設值 = 上限值(方案點數 ÷ 10)
更新上限提示文字
「上限:X 點(超出將自動修正)」
寫入自動儲值設定
存至 Api_Quota 或獨立 collection
✅ 成功
標題右側顯示「● 自動儲值:已啟用」綠色 badge
「儲存設定」→ disabled
顯示「停用自動儲值」按鈕
POST 更新設定(enabled: false)
⚡
此流程不由用戶操作觸發,而是事件驅動:每次 API 點數消耗扣點後,後端即時偵測餘額是否低於門檻並自動扣款。並發控制以分散式鎖(distributed lock)確保同一帳號同時間僅一筆扣款,不另設時間冷卻。
步驟
U用戶
B後端(事件驅動)
P金流(ECPay)
API 點數消耗後即時偵測
每次 API 呼叫扣點後,判斷該帳號是否「已啟用自動儲值」且餘額低於門檻
取得分散式鎖(distributed lock)
以帳號為鎖定範圍;搶鎖成功才進入扣款序列,搶鎖失敗代表已有另一請求處理中 → 略過本次
✦ 鎖內重新查詢 API 點數餘額
於鎖內再次讀取最新餘額,避免 stale read 造成重複扣款
取得綁定信用卡 token
從 DB 讀取用戶綁卡資訊
呼叫 ECPay 定期定額 / 重複交易 API
金額 = 選定方案售價(NT$900 / $6,000 / $18,000)
收到自動儲值成功通知 Email
含:購買方案、金額、新增點數、扣款時間
寄送成功 Email 通知
觸發時間、方案名稱、點數、剩餘餘額
收到自動扣款失敗 Email
含:失敗原因、請自行前往購買或更換卡片
| 規則 | 說明 | 執行層 |
| 分散式鎖防止重複扣款 |
事件驅動即時觸發;同一帳號的「餘額檢查 → 扣款 → 點數入帳 → 釋放鎖」為單一分散式鎖內的序列,確保並發請求不會同時觸發多筆扣款,不另設時間冷卻 |
後端 |
| 先主動購買才能啟用 |
用戶必須至少主動購買過一次 API 點數,才能開啟自動儲值;前端檢查 hasPurchased 狀態 |
前端 |
| 需已綁定信用卡 |
未綁卡時點擊「儲存並啟用」→ 開 ECPay 綁卡 Modal;綁卡完成後才能儲存 |
前端 |
| 門檻最低 / 上限 |
最低 1,000 點;上限 = 所選方案點數 ÷ 10(例如方案 A 9 萬點 → 上限 9,000 點);超出自動修正 |
前端 |
| 門檻選項可配置 |
門檻清單與方案對應建議值應設為 config / DB 可配置,不寫死於程式碼 |
後端 |
| 點數永久有效 |
透過自動儲值購入的點數同樣永久有效、Roll over,不受訂閱狀態影響 |
後端 |
| Email 通知已實作 |
「自動儲值成功通知」與「自動扣款失敗通知」信件已實作,觸發後自動寄送 |
後端 |
📍
位置:帳號設定 › 使用額度 Tab › API 生成點數 卡片下半段。點數餘額顯示於上方,自動儲值設定在分隔線之後。
狀態 A — 尚未啟用
請設定您的自動購買方案與觸發門檻,觸發後系統將會自動購買與儲值點數,並寄送 Email 通知。
狀態 B — 已啟用
請設定您的自動購買方案與觸發門檻,觸發後系統將會自動購買與儲值點數,並寄送 Email 通知。