計費、套餐、支付完整指南
涵蓋套餐、購買 / 續費 / 升級、餘額、充值、優惠碼、兌換碼、邀請碼。
涵蓋套餐、購買 / 續費 / 升級、餘額、充值、優惠碼、兌換碼、邀請碼。
TL;DR
- 餘額系統(
balanceCents)是內帳,不開放退款(除特殊情況)- 優惠碼 = 折扣;兌換碼 = 直接換套餐;邀請碼 = 註冊用
- 流量超額自動停用,月初 03:00 自動恢復
一、套餐
套餐欄位
| 欄位 | 說明 |
|---|---|
name | 顯示名稱(如「基礎版」「專業版」) |
description | Markdown 格式描述,使用者購買頁可見 |
monthlyPriceCents | 月度價(分),如 3000 = ¥30 |
maxDomains | 可建域名數上限 |
maxClusters | 同時可選叢集數上限 |
bandwidthGbMonth | 月流量配額(GB),超出自動停用 |
maxCacheSizeGbPerDomain | 每域名單節點快取空間上限 |
allowedClusterIds | 可用叢集白名單(JSON 陣列;[] = 全部叢集都可用) |
purchasable | 是否在購買頁公開展示(內部測試 / 兌換碼專用套餐保持 false) |
newPurchaseDisabled | 已下架,僅允許老用戶續費 |
套餐生命週期
| 操作 | 行為 |
|---|---|
| 首次購買 | 從餘額扣 N 個月的錢,設 planExpiresAt = 當前時間 + N 月 |
| 續費 | 同套餐延期,planExpiresAt += N 月 |
| 升級 | 換新套餐,按比例 prorate(剩餘天數退舊套餐 + 扣新套餐全價) |
| 降級 | 不支援(會吃虧),建議到期後再買新的 |
| 永久套餐 | planExpiresAt = null 視為永久,通常透過兌換碼發放 |
公開套餐 vs 內部套餐
purchasable=true:儀表板 > 套餐與帳單 可看可買purchasable=false:不在前台展示,只能透過兌換碼 / 管理員發放
二、續費 / 升級 / 自動續費
續費
/dashboard/billing > 續費:
- 選週期 → 從餘額扣費 →
planExpiresAt += 週期 - 寫
renewBalanceTransaction - 重置
expiryNotifiedAt(避免下次重新發到期通知)
升級
/dashboard/billing > 升級:
換新套餐並 prorate:
退款金額 = 舊套餐月價 × (剩餘天數 / 30)
應扣金額 = 新套餐 N 個月價 × (1 - 折扣) - 退款金額退款只是「在算式裡扣減」,並不真給你錢(平台不退款)。
自動續費
帳號設定 > 自動續費:
| 欄位 | 說明 |
|---|---|
autoRenew | 開關 |
autoRenewPeriod | month / half_year / year(null 視為 month) |
機制:
- 背景 cron 每天 3:00(台灣時間)掃所有
autoRenew=true用戶 - 到期前 24h 嘗試從餘額扣款延長
- 餘額不足:寄「快到期且餘額不足」郵件,到期當天不再自動扣(避免反覆失敗)
- 成功:寄「已自動續費」郵件
- 用
expiryNotifiedAt去重,每段到期窗口只發一次
三、流量超額
規則
每用戶月配額 = plan.bandwidthGbMonth。每月 1 號台灣時間 00:00 重新計算當月用量。
超量行為
當月累計流量超過配額時,當天 03:00 cron 跑到該使用者:
- 將該使用者所有域名
enabled=false+bandwidthExceeded=true - 寄郵件告知
自動恢復
每月 1 號(台灣時間)的 03:00 cron:
- 將所有
bandwidthExceeded=true域名重新enabled=true+bandwidthExceeded=false - 寄「新月流量重置」郵件
只恢復因超額自動停用的,不會碰使用者手動停用(
bandwidthExceeded=false但enabled=false)的域名。
幂等保證
cron 重啟 / 多 master 部署時:SystemConfig.bandwidth_reset_<yyyymm> 哨兵保證只發一次郵件。
手動繞開
不行。唯一辦法:
- 升級套餐(更高 bandwidthGbMonth)
- 聯絡管理員加流量贈送(走 admin_adjust)
- 等月初自動恢復
看自己用量
儀表板 > 我的統計 > 切換到月維度,可看當月累計流量 vs 配額。
四、常見問題
為什麼平台不開放退款?
- 第三方支付通道費 + 內部營運成本本身就無法退
- 防止「先充再退」的洗錢場景
- 設計簡化:單向流動 → ledger 永遠 append-only,對帳簡單
如有特殊情況聯繫管理員,可走 admin_adjust 補償(折抵未來消費)。
自動續費失敗會發生什麼?
- 餘額不足 → 寄通知信,當天不再自動扣(避免反覆失敗)
- 之後使用者 24 小時內充值 → 下次 cron 自動續費成功
- 始終沒充值 → 套餐到期過期,域名停用,直到使用者手動處理
套餐過期後域名會被刪嗎?
不會。但會 enabled=false,使用者重新買套餐後手動點啟用即可。
充值之後還沒到帳?
- 看訂單狀態(
/dashboard/billing > 充值記錄) - 若
pending超過 5 分鐘:點「立即查詢」手動觸發補單 - 仍 pending:等下個 30 分鐘 cron 自動補
- 平台明確失敗 / 退款:訂單變
failed/refunded,聯絡管理員確認
餘額能轉給其他帳號嗎?
不行。餘額綁定單一帳號,無轉帳功能。
優惠碼用了之後可以反悔嗎?
不行。purchase transaction 完成後 redemption 已寫入。退款可走 admin_adjust(管理員操作)。
同時開兩個瀏覽器都點購買會買兩次嗎?
不會。後端在 transaction 內二次讀 fresh 餘額,並用 updateMany where balanceCents >= cost 守門,並發購買最多有一個成功。
如何知道我快超流量了?
- 流量達 80% 時系統會寄「流量警告」郵件
- 我的統計頁面會顯示當月累計 vs 配額
- 超量前升級套餐即可繼續用,不需停用域名