# サブスクリプションの仕組み

継続支払いとサブスクリプションのライフサイクルを管理します。

サブスクリプションを使用すると、顧客は商品へのアクセスに対して継続決済を行うことができます。1 回限りの購入とは異なり、サブスクリプションでは、今後の請求に備えて追加の顧客情報を保存する必要があります。Stripe は、サブスクリプション請求の管理に役立つさまざまな機能を提供しています。

- さまざまな[料金体系に対応](https://docs.stripe.com/products-prices/pricing-models.md)
- [サブスクリプション割引管理](https://docs.stripe.com/billing/subscriptions/coupons.md)
- [トライアル管理](https://docs.stripe.com/billing/subscriptions/trials.md)
- [変更されたサブスクリプションの比例配分](https://docs.stripe.com/billing/subscriptions/prorations.md)
- [顧客セルフサービス管理](https://docs.stripe.com/customer-management.md)
- [決済を徴収するための請求](https://docs.stripe.com/billing/invoices/subscription.md)
- [売上回収の自動化](https://docs.stripe.com/billing/revenue-recovery.md)
- [レポートと分析](https://docs.stripe.com/billing/subscriptions/analytics.md)

## サブスクリプションのライフサイクル

以下のセクションでは、Stripe で推奨されるサブスクリプションのライフサイクルについて説明します。

### 定期支払いを作成する

[ダッシュボード](https://dashboard.stripe.com/subscriptions?status=active)または [API](https://docs.stripe.com/api/subscriptions/create.md) で新しいサブスクリプションを作成できます。サブスクリプションを作成するたびに、[イベント](https://docs.stripe.com/billing/subscriptions/webhooks.md#events)がトリガーされます。[Webhook エンドポイント](https://docs.stripe.com/billing/subscriptions/webhooks.md)でこれらのイベントをリッスンし、実装で適切に処理されていることを確認します。

オプションとして、サブスクリプションの決済を必要としない[トライアル](https://docs.stripe.com/billing/subscriptions/trials.md)を作成します。この場合、`status` は `trialing` です。トライアルが終了すると、サブスクリプションは `active` になり、Stripe はサブスクリプション登録済みの顧客に請求します。

#### 支払い処理

決済の失敗や 3DS などの複雑な決済フローを処理するために、サブスクリプションの `payment_behavior` を [default_incomplete](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) に設定することをお勧めします。これにより、決済が必要な場合にステータスが `incomplete` のサブスクリプションが作成され、その後決済情報を収集して確定し、サブスクリプションを有効化できます。

`payment_behavior` を次のように設定した場合。

- `allow_incomplete`: Stripe は直ちに請求書の支払いを回収します。支払いが失敗すると、サブスクリプションのステータスが `incomplete` に変わります。
- `error_if_incomplete`: 支払いが失敗した場合、サブスクリプションの作成は完全に失敗します。

ダッシュボードで作成するサブスクリプションは、決済手段に応じて適切な支払い動作がデフォルトで設定されます。

### 請求書を処理する

サブスクリプションを作成すると、Stripe はステータスが `open` の [請求書](https://docs.stripe.com/billing/invoices/subscription.md)を自動的に作成します。顧客は決済を完了するまで約 23 時間です。この間、サブスクリプションのステータスは `incomplete` で、インボイスのステータスは `open` のままです。

この時間枠が設けられているのは、通常、顧客はサブスクリプションの初回の決済を*オンセッション* (A payment is described as on-session if it occurs while the customer is actively in your checkout flow and able to authenticate the payment method)中に行うためです。顧客が 23 時間経過した後にアプリケーションに戻ってきた場合は、新しいサブスクリプションを作成します。

### 顧客が支払う

顧客が請求書を支払うと、サブスクリプションは `active` に、請求書は `paid` に更新されます。顧客が決済を行わないと、サブスクリプションは `incomplete_expired` に更新され、請求書は `void` になります。

請求書が決済されたかどうかを確認する場合:

- Webhookエンドポイントまたはその他のタイプのイベント送信先を設定し、`invoice.paid`イベントをリッスンします。
- サブスクリプションオブジェクトを手動で確認し、`subscription.status=active` を探します。自動請求または顧客による手動での支払いによって請求書への支払いが行われると、`status` は `active` になります。

詳細については、[サブスクリプションステータス](https://docs.stripe.com/billing/subscriptions/overview.md#subscription-statuses)と[決済ステータス](https://docs.stripe.com/billing/subscriptions/overview.md#payment-status)をご覧ください。

### 商品へのアクセスを提供する

顧客のサブスクリプションを作成すると、その製品に関連付けられた各機能に対して[有効なエンタイトルメント](https://docs.stripe.com/billing/entitlements.md)が作成されます。顧客がサービスにアクセスすると、その有効なエンタイトルメントを使用して、サブスクリプションに含まれる機能へのアクセスを顧客に許可します。

または、Webhook イベントで[アクティブサブスクリプションを追跡](https://docs.stripe.com/billing/subscriptions/webhooks.md#active-subscriptions)を使用し、そのアクティビティに基づいて顧客に商品をプロビジョニングすることもできます。

### サブスクリプションを更新する

[既存のサブスクリプション](https://docs.stripe.com/billing/subscriptions/change.md)は、キャンセルして再作成することなく、必要に応じて変更できます。最も重要な変更には、サブスクリプション価格の[アップグレードやダウングレード](https://docs.stripe.com/billing/subscriptions/change-price.md)、有効なサブスクリプションの[決済回収](https://docs.stripe.com/billing/subscriptions/pause-payment.md)の一時停止などがあります。

[Webhook エンドポイント](https://docs.stripe.com/billing/subscriptions/webhooks.md)で[サブスクリプションイベント](https://docs.stripe.com/billing/subscriptions/webhooks.md#events)をリッスンして、サブスクリプションの変更を確認できます。たとえば、決済が失敗した場合に顧客にメールを送信したり、サブスクリプションをキャンセルしたときに顧客のアクセスを取り消すことができます。

[Stripe Checkout](https://docs.stripe.com/payments/checkout.md) の組み込みでは、セッションのサブスクリプションが `incomplete` 場合、サブスクリプションまたはその請求書を更新できません。[checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) イベントをリッスンして、セッションの完了後に更新を行うことができます。セッションのサブスクリプションをキャンセルしたり、サブスクリプションの請求書を無効にしたり、請求書を回収不能としてマークしたりする場合は、代わりに[セッションを期限切れにする](https://docs.stripe.com/api/checkout/sessions/expire.md)こともできます。

### 最初の請求書を更新する

[collection_method](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-collection_method) が `send_invoice` の場合、サブスクリプションの最初の請求書を更新できます。請求書の作成後、1 時間以内に金額、ラインアイテム、説明、メタデータなどを更新する必要があります。請求書が確定され、支払いのために顧客に送信された後は、請求書を更新できません。

`collection_method` が `charge_automatically` に設定されたサブスクリプションの最初の請求書は、確定されるとすぐに課金されます。最初の請求書は確定前に更新することはできませんが、サブスクリプションの更新時に発行される次回以降の請求書は更新可能です。

サブスクリプションスケジュールの場合も、最初の請求書を更新することはできません。最初の請求書は、回収方法に関わらず常にオープンの状態です。

### 未払いのサブスクリプションを処理する

未払いの請求書があるサブスクリプションについては、その未払い請求書は引き続き未払いのまま表示されますが、さらなる決済の試行は停止されます。サブスクリプションの請求書は、引き続き各請求期間ごとに生成され、`draft` ステータスで保存されます。サブスクリプションは次の手順で有効にできます。

1. 必要に応じて新しい支払い情報を収集します。
1. 請求書の下書きで [auto_advance](https://docs.stripe.com/api/invoices/update.md#update_invoice-auto_advance) を `true` に設定して、自動回収を有効にします。
1. 未払い請求書の[確定](https://docs.stripe.com/api/invoices/finalize.md)と支払いを行います。無効になっていない最新の請求書を期日前に支払うと、サブスクリプションのステータスが `active` に更新されます。

回収不能とマークされた請求書は、基になるサブスクリプション `active` に保ちます。Stripe はサブスクリプションステータスを判断する際に無効化された請求書を無視し、代わりに無効化されていない最新の請求書を使用します。

未払いのサブスクリプションの `status` は、ダッシュボードの[決済失敗設定](https://dashboard.stripe.com/settings/billing/automatic)によって異なります。

### サブスクリプションをキャンセルする

サブスクリプションは、[請求期間の終了時](https://docs.stripe.com/billing/subscriptions/cancel.md#cancel-at-the-end-of-the-current-billing-period)や[設定した請求期間回数](https://docs.stripe.com/billing/subscriptions/cancel.md#subscription-schedules)の経過後など、いつでも[キャンセル](https://docs.stripe.com/billing/subscriptions/cancel.md)できます。

デフォルトでは、サブスクリプションをキャンセルすると、そのサブスクリプションの新しい請求書の作成が無効になり、そのサブスクリプションのすべての未払いの請求書の[自動回収が停止](https://docs.stripe.com/billing/subscriptions/cancel.md#handle-invoice-items-when-canceling-subscriptions)されます。また、サブスクリプションが削除されると、サブスクリプションまたはその[メタデータ](https://docs.stripe.com/metadata.md)は更新できなくなります。顧客が再びサブスクリプションを希望する場合、顧客から新しい決済情報を収集して新しいサブスクリプションを作成する必要があります。

## サブスクリプションステータス

サブスクリプションには次のステータスがあります。サブスクリプションに対して実行できるアクションは、ステータスによって異なります。

| ステータス                | 説明                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `trialing`           | サブスクリプションは現在トライアル期間中であり、顧客にプロダクトを支障なく提供できます。初回の支払いが行われると、サブスクリプションは自動的に `active` に移行します。                                                                                                                                                                                                                                                                                                                                                                               |
| `active`             | サブスクリプションの状態は良好です。`past_due` のサブスクリプションでは、関連する最新の請求書を支払うか、回収不可としてマークすると、サブスクリプションが `active` に移行します。`active` は、サブスクリプションに関連するすべての未払いの請求書が支払われたことを示すものではない点に注意してください。その他の未払いの請求書は、支払い待ちのまま残すことも、回収不可としてマークすることも、必要に応じて無効にすることもできます。                                                                                                                                                                                                                                      |
| `incomplete`         | サブスクリプションを有効にするには、顧客が 23 時間以内に支払いを成功させる必要があります。または、支払いで顧客認証などの[対応が必要](https://docs.stripe.com/billing/subscriptions/overview.md#requires-action)です。保留中の支払いがあり、PaymentIntent のステータスが `processing` の場合も、サブスクリプションが `incomplete` になることがあります。                                                                                                                                                                                                                              |
| `incomplete_expired` | サブスクリプションの初回の支払いが失敗し、サブスクリプションの作成から 23 時間以内に支払いが成功しませんでした。これらのサブスクリプションは顧客に請求されません。このステータスは、サブスクリプションの有効化に失敗した顧客を追跡するために存在します。                                                                                                                                                                                                                                                                                                                                         |
| `past_due`           | 最新の *確定済み* の請求書の決済は、失敗したか、試行されていません。サブスクリプションは、引き続き請求書を作成します。ダッシュボードの [subscription settings](https://dashboard.stripe.com/settings/billing/automatic) によって、サブスクリプションの次のステータスが決まります。[smart retries](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md) を試行しても請求書が未払いの場合は、サブスクリプションを `canceled`、`unpaid`、または `past_due` のままにするように設定できます。サブスクリプションを再度有効にするには、顧客に最新の請求書を決済してもらいます。サブスクリプションのステータスは、決済が最新の請求書より前に行われたか、最新の請求書の期日を過ぎたかに関係なく、`active` になります。 |
| `canceled`           | サブスクリプションがキャンセルされました。キャンセル時に未払いのすべての請求書の自動回収が無効化されます (`auto_advance=false`)。これは、更新できない最終的なステータスです。                                                                                                                                                                                                                                                                                                                                                                     |
| `unpaid`             | 最新の請求書は支払われていませんが、サブスクリプションはそのまま保持されます。最新の請求書は未処理のままになり、請求書は引き続き生成されますが、支払いの試行は行われません。サブスクリプションが `unpaid` の場合は、`past_due` の時点で支払いの試行と再試行がすでに行われているため、プロダクトへのアクセスを取り消します。サブスクリプションのステータスを `active` にするには、期日前に最新の請求書を支払う必要があります。                                                                                                                                                                                                                                         |
| `paused`             | サブスクリプションはデフォルトの決済手段なしでトライアル期間が終了し、[trial_settings.end_behavior.missing_payment_method](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#create-free-trials-without-payment) が `pause` に設定されています。サブスクリプションの請求書は作成されなくなりました。顧客にデフォルトの決済手段を関連付けた後で、[サブスクリプションを再開](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#resume-a-paused-subscription)できます。                                                                              |

## 決済ステータス

[PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) は、すべての決済のライフサイクルを追跡します。サブスクリプションの決済期日になると、Stripe は[請求書](https://docs.stripe.com/billing/invoices/subscription.md)と PaymentIntent を生成します。PaymentIntent ID は請求書に関連付けられ、請求書オブジェクトとサブスクリプションオブジェクトからアクセスできます。

PaymentIntent のステータスは、請求書とサブスクリプションのステータスに影響を与えます。決済のさまざまな結果が、さまざまなステータスにどのようにマッピングされるかを以下に示します。

| 支払い結果       | PaymentIntent ステータス       | 請求書のステータス | サブスクリプションのステータス |
| ----------- | ------------------------- | --------- | --------------- |
| 成功          | `succeeded`               | `paid`    | `active`        |
| カードエラーによる失敗 | `requires_payment_method` | `open`    | `incomplete`    |
| 認証による失敗     | `requires_action`         | `open`    | `incomplete`    |

ACH Direct Debit などの非同期決済手段は、サブスクリプションステータスの移行を即時決済手段とは異なる方法で処理します。非同期決済手段を使用する場合、サブスクリプションは作成後に直接 `有効` に移行し、`未完了` をバイパスできます。後で決済が失敗した場合、Stripe は請求書を無効にしますが、サブスクリプションは `有効な` ままになります。アクセス制御と再試行ロジックを設計する際には、この動作を使用します。

以降のセクションでは、これらのステータスと、各ステータスに対するアクションを説明します。

### 支払いの成功

顧客の決済が成功した場合:

- PaymentIntent の `status` は `succeeded` に移行します。
- サブスクリプションの `status` は `active` です。
- 請求書の `status` は `paid` です。
- 設定済みの Webhook エンドポイントに Stripe が `invoice.paid` イベントを送信します。

処理期間が長い[決済手段](https://docs.stripe.com/payments/payment-methods/integration-options.md)では、サブスクリプションは直ちに有効になります。このような場合、決済が成功するまで、PaymentIntent のステータスは `processing` サブスクリプションに対して `active` である可能性があります。

サブスクリプションが有効になったので、商品への[アクセスを提供](https://docs.stripe.com/billing/subscriptions/overview.md#provision-access)します。

### 支払い方法が必要

支払い拒否などの[カードエラー](https://docs.stripe.com/api/errors.md#errors-card_error)が原因で[決済](https://docs.stripe.com/declines.md#issuer-declines)が失敗した場合:

- PaymentIntent の `status` は `requires_payment_method` です。
- サブスクリプションの `status` は `incomplete` です。
- 請求書の `status` は `open` です。

これらのシナリオを処理するには、以下のステップに従います。

- 顧客に通知します。
- 新しい決済情報を徴収し、[PaymentIntent を確定](https://docs.stripe.com/api/payment_intents/confirm.md)します。
- サブスクリプションの [default payment method (デフォルトの支払い方法)](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-default_payment_method) を更新します。
- Stripe は [Smart Retries](https://docs.stripe.com/invoicing/automatic-collection.md#smart-retries) を使用するか、カスタム [リトライルール](https://dashboard.stripe.com/account/billing/automatic) に基づいて決済を再試行します。
- [invoice.payment_failed](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md#invoice-payment-failed-webhook) イベントを使用して、サブスクリプション決済失敗イベントを監視し、更新を再試行します。請求書の決済試行後、その [next_payment_attempt](https://docs.stripe.com/api.md#invoice_object-next_payment_attempt) 値はダッシュボードの現在のサブスクリプション設定を使用して設定されます。

[サブスクリプションの支払い失敗を処理](https://docs.stripe.com/billing/subscriptions/webhooks.md#payment-failures)する方法は以下のとおりです。

### アクションが必要

決済手段によっては、決済プロセスを完了するために [3D セキュア](https://docs.stripe.com/payments/3d-secure.md) (3DS) による顧客認証が必要です。3DS は認証プロセスを完了します。決済手段で認証が必要かどうかは、[Radar ルール](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar)とカード発行会社によって異なります。

顧客が決済を認証する必要があるために決済が失敗した場合:

- PaymentIntent の `status` は `requires_action` です。
- サブスクリプションの `status` は `incomplete` です。
- 請求書の `status` は `open` です。

これらのシナリオを処理するには、以下のステップに従います。

- [Webhook エンドポイント](https://docs.stripe.com/billing/subscriptions/webhooks.md)を使用して `invoice.payment_action_required` イベントの通知を監視します。これには認証が必要です。
- 認証が必要であることを顧客に通知します。
- PaymentIntent のクライアントシークレットを取得し、それを[stripe.ConfirmCardPayment](https://docs.stripe.com/js/payment_intents/confirm_card_payment) の呼び出しに渡します。これで顧客に認証モーダルが表示されるようになり、決済が行われると、モーダルが閉じてコンテキストがアプリケーションに戻されます。
- イベントの送信先で `invoice.paid` イベントをモニタリングし、支払いが成功したことを確認します。ユーザーは、`confirmCardPayment()` が完了する前にアプリケーションを離れることができます。支払いが成功したかどうかを確認することで、商品を正しく提供できます。

## See also

- [サブスクリプションの導入を設計](https://docs.stripe.com/billing/subscriptions/design-an-integration.md)
- [サブスクリプションクイックスタート](https://docs.stripe.com/billing/quickstart.md)
- [固定価格のサブスクリプション例](https://github.com/stripe-samples/subscription-use-cases/tree/main/fixed-price-subscriptions)
