試用期
提供免費試用期,降低顧客購買門檻,提升轉換率
試用期
試用期讓顧客免費體驗您的產品,到期後自動轉為正式訂閱扣款。這是降低購買門檻、提升轉換率的有效策略。
運作方式概覽
- 在產品設定中啟用試用期,設定試用天數
- 顧客結帳時,系統以 NT$2 驗證扣款確認信用卡有效
- 試用期間顧客免費使用,訂閱狀態為
trialing - 試用期到期,系統自動扣全額並轉為
active正式訂閱
試用期狀態流程
信用卡驗證(NT$2 驗證扣款)
為什麼收 NT$2 而非全額?
試用期間不收取產品費用,但需確認顧客的信用卡有效。系統會進行一筆 NT$2 的驗證扣款,成功後立即取消授權(不會實際請款),確保試用期結束時能順利扣款。
驗證流程
- 顧客在結帳頁面輸入信用卡資訊
- 系統向金流發起 NT$2 授權交易
- 授權成功後,系統綁定信用卡以供後續扣款使用
- 系統立即取消授權,不會實際扣款
- 訂閱狀態從
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.created | pending | 訂閱記錄建立 |
| 驗證 | order.paid | pending | NT$2 驗證成功 |
| 驗證 | subscription.activated | trialing | 訂閱進入試用 |
| 結帳 | checkout.completed | trialing | 結帳流程完成 |
| 試用到期 | invoice.created | trialing | 全額帳單建立 |
| 試用到期 | invoice.paid | active | 全額扣款成功 |
| 試用到期 | subscription.renewed | active | 訂閱轉正式 |
判斷訂閱是否在試用期
收到 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 事件類型。
後台設定
- 前往「商品管理」→ 選擇或新增商品
- 選擇「訂閱制」
- 啟用「試用期」
- 設定試用天數(如 7 天、14 天、30 天)
- 儲存並發布
最佳實踐
- 設定合理的試用天數 - 太短無法充分體驗,太長降低轉換急迫性。7-14 天是常見選擇
- 搭配提醒機制 - 在試用即將到期前發送通知,提醒顧客即將扣款
- 提供試用期內的引導 - 透過 Email 系列引導顧客探索產品核心功能
- 追蹤試用轉換率 - 監控從
trialing到active的轉換率 - 考慮搭配優惠碼 - 針對特定客群提供延長試用或首期特價
Last updated on