高級
BOLT12 Recurrence 週期性支付
了解 BOLT12 Offers 的週期性支付功能,實現訂閱和定期付款。
10 分鐘
什麼是週期性支付?
BOLT12 的週期性支付功能允許創建訂閱式的 Offer。 付款人可以定期(如每月)向同一個 Offer 支付,無需每次獲取新發票。
用戶控制: 與傳統自動扣款不同,閃電訂閱需要付款人主動發起每次支付。
Offer 結構
週期性 Offer 欄位:
recurrence 欄位:
recurrence: {
time_unit: <unit>, // 時間單位
period: <number>, // 週期數
basetime: <timestamp>, // 可選:第一個週期開始時間
limit: <number>, // 可選:最大支付次數
paywindow: { // 可選:支付窗口
seconds_before: <n>,
seconds_after: <n>,
proportional_amount: <bool>
}
}
時間單位:
• 0: 秒(seconds)
• 1: 天(days)
• 2: 週(weeks)
• 3: 月(months)
• 4: 年(years) 使用範例
月度訂閱範例:
Offer 創建:
{
description: "Premium Membership",
amount_msat: 10000000, // 10,000 sats/月
recurrence: {
time_unit: 3, // 月
period: 1, // 每 1 個月
paywindow: {
seconds_before: 86400, // 可提前 1 天支付
seconds_after: 604800 // 可延遲 7 天支付
}
}
}
Invoice Request(第 N 次):
{
offer_id: <offer_id>,
recurrence_counter: N, // 第幾次支付
recurrence_start: <time>, // 週期開始時間
payer_key: <pubkey>
} 支付窗口
paywindow 機制:
時間線:
|<-- seconds_before -->|<-- 週期開始 -->|<-- seconds_after -->|
| 可提前支付 | 精確時間 | 寬限期 |
時間軸:─────────[═══════════════]─────────────────>
↑ ↑ ↑
最早 週期開始 最晚
支付時間 支付時間
proportional_amount:
如果 proportional_amount = true:
• 提前支付:按比例減少金額
• 延遲支付:按比例增加金額
範例:月費 30,000 sats,提前 10 天支付
實際支付 = 30,000 × (30-10)/30 = 20,000 sats 錢包自動化
錢包可以提醒用戶支付即將到期的訂閱,或自動支付(用戶授權下)。
取消訂閱
用戶只需停止支付即可取消,無需通知服務提供者。
實現狀態: 週期性支付是 BOLT12 的進階功能,目前實現支持程度各異。CLN 支持較完整。
相關資源
- • BOLT12 Offers
- • Offers 退款
- • 發票請求
已複製連結