Recur
功能收款方式

試用期

提供免費試用期,降低顧客購買門檻,提升轉換率

試用期

試用期讓顧客免費體驗您的產品,到期後自動轉為正式訂閱扣款。這是降低購買門檻、提升轉換率的有效策略。

運作方式概覽

  1. 在產品設定中啟用試用期,設定試用天數
  2. 顧客結帳時,系統以 NT$2 驗證扣款確認信用卡有效
  3. 試用期間顧客免費使用,訂閱狀態為 trialing
  4. 試用期到期,系統自動扣全額並轉為 active 正式訂閱

試用期狀態流程


信用卡驗證(NT$2 驗證扣款)

為什麼收 NT$2 而非全額?

試用期間不收取產品費用,但需確認顧客的信用卡有效。系統會進行一筆 NT$2 的驗證扣款,成功後立即取消授權(不會實際請款),確保試用期結束時能順利扣款。

驗證流程

  1. 顧客在結帳頁面輸入信用卡資訊
  2. 系統向金流發起 NT$2 授權交易
  3. 授權成功後,系統綁定信用卡以供後續扣款使用
  4. 系統立即取消授權,不會實際扣款
  5. 訂閱狀態從 pending 轉為 trialing

免綁卡兌換:當使用 100% 折扣優惠碼搭配 collectPaymentMethod: 'if_required' 時,不會進行 NT$2 驗證,也不需要綁定信用卡。訂閱會直接建立並進入 TRIAL(若有試用期)或 ACTIVE 狀態。詳見零元結帳


試用期間的重要日期

試用期間,訂閱的日期欄位有特殊含義:

欄位試用期間的值說明
trial_ends_at試用結束日期試用期到期的確切時間
current_period_start訂閱建立日期試用開始時間
current_period_end= trial_ends_at試用期間,週期結束等同試用到期
next_billing_date= trial_ends_at下次扣款即為試用到期日

current_period_end 在試用期間的含義不同

一般訂閱的 current_period_end 代表一個完整計費週期的結束(如一個月後)。但在試用期間,current_period_end 等同 trial_ends_at,代表試用期到期日,不是完整計費週期。

試用到期轉正式訂閱後,current_period_end 才會反映真正的計費週期。


結帳流程(含試用期)

與一般結帳的差異

  • 一般結帳:扣全額 → 訂閱狀態為 active
  • 試用期結帳:NT$2 驗證 → 取消授權 → 訂閱狀態為 trialing

試用期轉正式訂閱(Trial Graduation)

試用期到期後,系統自動將訂閱從 trialing 轉為 active 並扣取全額。

扣款失敗處理

試用期轉正式扣款失敗時,行為取決於產品的「付款寬限期」設定:

  • 寬限期啟用(預設): 訂閱進入 past_due 狀態,系統在 3 天寬限期內自動重試扣款(最多 3 次)。若所有重試都失敗,訂閱將被取消。
  • 寬限期關閉: 訂閱立即取消(canceled),不會重試。

詳見催繳與寬限期


試用期間的操作

方案切換

試用期間切換方案不涉及差額計算

試用期間尚未付費,因此切換方案時不會計算差額。新方案的價格將在試用期結束時生效。試用到期日(trial_ends_at)不會因方案切換而改變。

取消訂閱

試用期間,顧客可以隨時取消訂閱:

  • 立即取消:訂閱立即變為 cancelled,不再扣款
  • 週期結束取消:訂閱在試用期到期時過期,不扣全額

延長試用(透過優惠碼)

透過「延長試用」類型的優惠碼,可以在產品原有試用期的基礎上額外增加試用天數。

範例: 產品設定 7 天試用 + 優惠碼延長 14 天 = 共 21 天試用

詳細設定方式請參考時間加成 - 延長試用


技術整合

Webhook 事件時序

以下是試用期訂閱從建立到轉正式的完整事件時序:

階段事件訂閱狀態說明
結帳checkout.created-結帳 Session 建立
結帳subscription.createdpending訂閱記錄建立
驗證order.paidpendingNT$2 驗證成功
驗證subscription.activatedtrialing訂閱進入試用
結帳checkout.completedtrialing結帳流程完成
試用到期invoice.createdtrialing全額帳單建立
試用到期invoice.paidactive全額扣款成功
試用到期subscription.renewedactive訂閱轉正式

判斷訂閱是否在試用期

收到 subscription.activated 時,檢查 trial_ends_at 欄位:

async function handleSubscriptionActivated(data: SubscriptionPayload) {
  if (data.trial_ends_at) {
    // 試用期訂閱 - status 為 trialing
    console.log(`試用期到 ${data.trial_ends_at}`);
    // 可自行排程提醒顧客試用即將到期
  } else {
    // 一般訂閱 - status 為 active
    console.log('訂閱已啟用');
  }
}

subscription.trial_ending 事件

即將推出

subscription.trial_ending 事件目前尚未上線。此事件預計在試用期到期前 3 天自動觸發,提醒開發者即將進行正式扣款。

目前的替代方案: 收到 subscription.activated 事件時,讀取 trial_ends_at 欄位,在您的系統中自行排程提醒通知。

Payload 範例

試用期 subscription.activated:

{
  "id": "evt_sub_activated_trial_001",
  "type": "subscription.activated",
  "timestamp": "2024-01-15T10:05:30.000Z",
  "data": {
    "id": "sub_trial123",
    "customer": {
      "id": "cus_xyz789",
      "external_id": "my_user_456",
      "email": "user@example.com",
      "name": "王小明"
    },
    "product_id": "prod_pro",
    "price_id": "price_pro_monthly",
    "status": "trialing",
    "original_amount": 299,
    "discount": null,
    "amount": 299,
    "interval": "month",
    "interval_count": 1,
    "next_billing_date": "2024-01-29T00:00:00.000Z",
    "trial_ends_at": "2024-01-29T00:00:00.000Z",
    "current_period_start": "2024-01-15T00:00:00.000Z",
    "current_period_end": "2024-01-29T00:00:00.000Z",
    "created_at": "2024-01-15T10:05:00.000Z",
    "updated_at": "2024-01-15T10:05:30.000Z"
  }
}

詳細 Webhook payload 格式請參考 Webhook 事件類型


後台設定

  1. 前往「商品管理」→ 選擇或新增商品
  2. 選擇「訂閱制」
  3. 啟用「試用期」
  4. 設定試用天數(如 7 天、14 天、30 天)
  5. 儲存並發布

最佳實踐

  1. 設定合理的試用天數 - 太短無法充分體驗,太長降低轉換急迫性。7-14 天是常見選擇
  2. 搭配提醒機制 - 在試用即將到期前發送通知,提醒顧客即將扣款
  3. 提供試用期內的引導 - 透過 Email 系列引導顧客探索產品核心功能
  4. 追蹤試用轉換率 - 監控從 trialingactive 的轉換率
  5. 考慮搭配優惠碼 - 針對特定客群提供延長試用或首期特價

Last updated on

On this page