---
title: 試用期
description: 提供免費試用期，降低顧客購買門檻，提升轉換率
---

# 試用期

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

## 運作方式概覽

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

---

## 試用期狀態流程

```mermaid
flowchart TD
    pending([pending]) -- NT$2 驗證成功 --> trialing([trialing])
    trialing -- 試用到期，扣款成功 --> active([active])
    trialing -- 試用到期，扣款失敗 --> past_due([past_due])
    trialing -- 顧客主動取消 --> cancelled([cancelled])
    trialing -- 排程取消到期 --> expired([expired])
    past_due -- 重試扣款成功 --> active
    past_due -- 所有重試失敗 --> expired
    cancelled -- 期滿 --> expired
```

---

## 信用卡驗證（NT$2 驗證扣款）

**為什麼收 NT$2 而非全額？**

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

### 驗證流程

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

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

---

## 試用期間的重要日期

試用期間，訂閱的日期欄位有特殊含義：

| 欄位 | 試用期間的值 | 說明 |
|------|-------------|------|
| `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` 才會反映真正的計費週期。

---

## 結帳流程（含試用期）

```mermaid
sequenceDiagram
    participant 顧客
    participant 結帳頁面
    participant Recur
    participant 金流
    participant Webhook

    顧客->>結帳頁面: 進入結帳頁面
    結帳頁面->>Recur: 建立 Checkout Session
    Recur-->>Webhook: checkout.created
    Note right of Webhook: 結帳 Session 建立

    顧客->>結帳頁面: 填寫姓名、Email
    結帳頁面->>Recur: 建立訂閱記錄
    Recur-->>Webhook: subscription.created
    Note right of Webhook: 訂閱建立 (pending)

    顧客->>結帳頁面: 輸入信用卡並送出
    結帳頁面->>Recur: 執行 NT$2 驗證
    Recur->>金流: NT$2 授權交易
    金流-->>Recur: 授權結果

    alt 驗證成功
        Recur->>金流: 取消授權（不實際扣款）
        Recur-->>Webhook: order.paid
        Note right of Webhook: NT$2 驗證訂單
        Recur-->>Webhook: subscription.activated
        Note right of Webhook: 訂閱啟用 (trialing)
    else 驗證失敗
        Recur-->>Webhook: order.payment_failed
    end

    Recur-->>Webhook: checkout.completed
    Note right of Webhook: 結帳流程完成
```

**與一般結帳的差異**

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

---

## 試用期轉正式訂閱（Trial Graduation）

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

```mermaid
sequenceDiagram
    participant 排程任務
    participant Recur
    participant 金流
    participant Webhook

    排程任務->>Recur: 偵測 trialEndsAt <= now
    Recur->>Recur: TRIAL → ACTIVE
    Recur->>Recur: 建立 Invoice
    Recur-->>Webhook: invoice.created
    Note right of Webhook: 帳單建立 (pending)

    Recur->>金流: 執行信用卡扣款（全額）
    金流-->>Recur: 回傳結果

    alt 扣款成功
        Recur-->>Webhook: invoice.paid
        Recur-->>Webhook: subscription.renewed
        Note right of Webhook: 訂閱轉正式 (active)
    else 扣款失敗
        Recur-->>Webhook: invoice.payment_failed
        Recur-->>Webhook: subscription.past_due
        Note right of Webhook: 訂閱進入逾期狀態
    end
```

**扣款失敗處理**

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

- **寬限期啟用（預設）：** 訂閱進入 `past_due` 狀態，系統在 3 天寬限期內自動重試扣款（最多 3 次）。若所有重試都失敗，訂閱將被取消。
- **寬限期關閉：** 訂閱立即取消（`canceled`），不會重試。

詳見[催繳與寬限期](/features/automation/dunning)。

---

## 試用期間的操作

### 方案切換

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

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

### 取消訂閱

試用期間，顧客可以隨時取消訂閱：

- **立即取消**：訂閱立即變為 `cancelled`，不再扣款
- **週期結束取消**：訂閱在試用期到期時過期，不扣全額

---

## 延長試用（透過優惠碼）

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

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

詳細設定方式請參考[時間加成 - 延長試用](/features/promotions/bonuses#延長試用)。

---

## 技術整合

### 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` 欄位：

```typescript
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：**

```json
{
  "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 事件類型](/guides/webhooks/events)。

---

## 後台設定

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

---

## 最佳實踐

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