# Billing の実装テスト

Billing 実装をテストして、本番環境での使用を確認する方法をご紹介します。

- テスト用の[カード](https://docs.stripe.com/testing.md#cards)と[口座番号](https://docs.stripe.com/testing.md#test-account-numbers)を使用して、決済の失敗や必要な認証など、さまざまなシナリオをトリガーします。
- [テストクロック](https://docs.stripe.com/billing/testing/test-clocks.md)を使用して、時間の経過に伴う `Billing` オブジェクトをシミュレートし、無料トライアルや年額プランの終了など、さまざまなマイルストーンでイベントをテストします。
- Stripe のすべてに共通する基本的なテストの詳細については、[一般的なテストに関するドキュメント](https://docs.stripe.com/testing.md)をご覧ください。

システムを顧客に表示したり、本番環境のアクティビティーに使用する前に、システム全体をテストする必要があります。組織のガイドライン (ランブック、品質ゲート、または開発チェックリスト) に加えてこのページのリソースを使用すると、システムが本番環境に対応しているかどうかを判断しやすくなります。

新規の Billing 実装では、テストモードサンドボックスの代わりに汎用サンドボックスを使用します。自動テストが商品、価格、顧客、Webhook エンドポイント、設定、テストデータに影響しないように、ローカル開発用と継続的な構築 (CI) 用に別々のサンドボックスを使用します。[テスト環境の選択](https://docs.stripe.com/testing-use-cases.md#compare)の詳細を参照してください。

組み込みを本番環境に移行する前に、次の Stripe チェックリストを確認してください。

- [アカウントのチェックリスト](https://docs.stripe.com/get-started/account/checklist.md)
- [開発チェックリスト](https://docs.stripe.com/get-started/checklist/go-live.md)
- [ウェブサイトチェックリスト](https://docs.stripe.com/get-started/checklist/website.md)

## テストと実装のフロー

一般的な実装のフローは次のとおりです:

基本的な Billing の組み込み (See full diagram at https://docs.stripe.com/billing/testing)

```text
[顧客] -- customer.created: 支払いの詳細とサブスクリプションを入力する --> [サイト]
[サイト] -- 顧客設定の Account オブジェクトまたは Customer オブジェクトと Subscriptions オブジェクトを作成する --> [Stripe]
[Stripe] -- customer.created: customer.created イベントを送信する --> [サイト]
[Stripe] -- customer.subscription.created: customer.subscription.created イベントを送信する --> [サイト]
[Stripe] -- 請求書を作成する --> [Stripe]
[Stripe] -- invoice.created: invoice.created イベントを送信する --> [サイト]
[Stripe] -- invoice.finalized: invoice.finalized イベントを送信する --> [サイト]
[Stripe] -- 顧客に請求書を送信する --> [顧客]
[顧客] -- カスタマーポータルから請求書を支払う --> [Stripe]
[Stripe] -- invoice.paid: invoice.paid イベントを送信する --> [サイト]
[顧客] -- カスタマーポータルからサブスクリプションをキャンセルする --> [Stripe]
[Stripe] -- customer.subscription.deleted: customer.subscription.deleted イベントを送信する --> [サイト]
[サイト] -- キャンセルを確定する --> [顧客]
```

> #### Accounts v2 API を使用した顧客の表現
> 
> Accounts v2 API では、Connect ユーザーには一般提供され、その他の Stripe ユーザーには公開プレビューで提供されます。Accounts v2 プレビューの一部である場合は、コードで[プレビューバージョン](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning)を指定する必要があります。
> 
> Accounts v2 のプレビューに参加するには、ダッシュボードの [Account previews and features](https://dashboard.stripe.com/settings/previews) に移動して、**Global Payouts の再利用可能な決済手段**を有効にします。
> 
> ほとんどのユースケースでは、[Customer](https://docs.stripe.com/api/customers.md) オブジェクトを使用するのではなく、[顧客を顧客設定済みの Account オブジェクトとしてモデル化する](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md)ことをお勧めします。

サブスクリプションと経常収益の組み込みでは、少なくとも次のコンポーネントが想定通りに動作することを確認してください。

The table lists the asynchronous event notifications for each component. Wait for the relevant event before you test your integration’s downstream behavior. Configure your integration to listen for these events with *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)s. For more information, see [event notifications and testing](https://docs.stripe.com/billing/testing.md#webhooks).

| コンポーネント | 説明 | Asynchronous events |
| --- | --- | --- |
| **顧客の登録** | Stripe で顧客レコードを作成するために必要な情報を、実装で正常に収集できることを確認してください。顧客は、Payment Links、Checkout、*Elements* (A set of UI components for building a web checkout flow. They adapt to your customer's locale, validate input, and use tokenization, keeping sensitive customer data from touching your server)、または [Stripe API](https://docs.stripe.com/api.md) で構築したカスタム決済フォームを通じてその情報を入力できます。どのフォームを使用する場合も、顧客が設定した`アカウント`または `Customer` オブジェクトが Stripe に保存されていることを確認してください。ダッシュボードまたは API を使用して[顧客を表示、管理](https://docs.stripe.com/billing/customer.md#manage-customers)できます。 | - `v2.core.account.created`
- `v2.core.account[configuration.customer].updated`
- `customer.created`
- `customer.subscription.created` |
| **請求書作成** | サブスクリプションでは、各請求期間の終わりに*請求書* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice)が生成されます。決済の回収方法に応じて、後払いの決済を回収するため、または自動請求を確認するために請求書を送信できます。実装で、想定どおりに請求書が作成および送信されることを確認してください。[サブスクリプションの請求書](https://docs.stripe.com/billing/invoices/subscription.md)の作成と管理の詳細をご覧ください。テストクロックを使用すると、請求書の生成や送信を含む請求期間をシミュレートできます。テストする具体的なユースケースについては、[テストクロックガイド](https://docs.stripe.com/billing/testing/test-clocks/api-advanced-usage.md#use-cases)をお読みください。 | - `invoice.created`
- `invoice.finalized`
- `invoice.finalization_failed`
- `invoice.paid`
- `invoice.payment_action_required`
- `invoice.payment_failed`
- `invoice.upcoming`
- `invoice.updated` |
| **サブスクリプションの管理** | *カスタマーポータル* (The customer portal is a secure, Stripe-hosted page that lets your customers manage their subscriptions and billing details)を設定することで、顧客は*サブスクリプション* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis)と請求情報を管理できるようになります。これをテストするには、まず*サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)でサブスクリプションを作成します。次に、テストユーザーとしてポータルにログインし、サブスクリプションを更新します。ダッシュボードまたは API をチェックして、サブスクリプションに顧客の変更が反映されているかどうかを確認します。カスタマーポータルの設定方法については、[実装ガイド](https://docs.stripe.com/customer-management.md)をご確認ください。 | - `customer.subscription.deleted`
- `customer.subscription.paused`
- `customer.subscription.resumed`
- `customer.subscription.updated` |
| **トライアル** | 顧客にサービスのトライアルを提供します。トライアルが正しく設定されていることをテストするには、テストクロックを作成できます。サブスクでは、トライアル期間に対して金額が 0 の請求書が生成されます。[テストクロックを使用してトライアルをテストする方法をご確認ください](https://docs.stripe.com/billing/testing.md#trials)。トライアルの仕組みの詳細については、[サブスクのトライアルガイド](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md)をお読みください。 | - `customer.subscription.trial_will_end`
- `customer.subscription.updated` |
| **支払いの失敗** | 顧客からの決済は、さまざまな理由で失敗する可能性があります。決済を再試行することを含め、実装で失敗に対処できることを確認してください。[決済の失敗をテストする方法をご覧ください](https://docs.stripe.com/billing/testing.md#payment-failures)。 | - `invoice.finalization_failed`
- `invoice.payment_failed`
- `invoice.payment_action_required` |

## テストクロック

テストクロックを使用すると、*サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)内で*サブスクリプション* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis)などの `Billing` オブジェクトを時間の経過に伴ってシミュレートできるため、実装が年次更新時の決済の失敗にどう対処するかを確認するために 1 年間待つ必要はありません。テストクロックではコードを記述する必要はありません: ダッシュボードでシミュレーションを作成できます。API からアクセスすることもできます。[テストクロック](https://docs.stripe.com/billing/testing/test-clocks.md)と、その一般的な[ユースケース](https://docs.stripe.com/billing/testing/test-clocks.md)の詳細をご覧ください。

## サブスクリプションのトライアル期間をテストする

顧客に、決済を開始する前に 7 日間の無料トライアルで製品を試してもらい、事前に決済情報を収集したいとします。テストクロックを使用してこの状況をシミュレートするには、次の手順に従います。

- 新しいシミュレーションを作成し、`frozen_time` を January 1 に設定します。
- 顧客を追加して支払い方法を含めます。ここでは、4242424242424242 の[テストカード](https://docs.stripe.com/testing.md#cards)を使用します。
- サブスクリプションを作成して、7 日間の無料トライアル期間を追加します。

#### ダッシュボード

ダッシュボードから既存のサブスクリプションにトライアル期間を追加するには、以下を行います。

変更するサブスクリプションを探します。

1. **アクション**をクリックします。
2. **サブスクリプションを更新**をクリックします。
3. **無料トライアルを追加**をクリックして、**無料トライアルの日数**フィールドに 7 を入力します。
4. **サブスクリプションを更新**をクリックします。

#### API

サブスクリプションの作成時に次のように `trial_period_days=7` 引数を指定することで、無料のトライアル期間を設けて顧客のサブスクリプションを開始できます。

#### Accounts v2

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer_account={{CUSTOMERACCOUNT_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d trial_end=1610403705
```

#### Customers v1

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d trial_end=1610403705
```

- 7 日間の無料トライアル期間を設定してサブスクリプションを作成すると、サブスクリプションは `trialing` ステータスになります。無料トライアルのため、0.00 USD の請求書が生成されます。
- 日付を 1 月 5 日に進めて、[customer.subscription.trial_will_end](https://docs.stripe.com/api/events/types.md#event_types-customer.subscription.trial_will_end) イベントの通知を確認します。Stripe は、トライアルが終了する 3 日前に通知を送信します。この Webhook イベントを使用して、トライアルがまもなく終了することを顧客に通知できます。
- 日付を 1 月 8 日に進めて、サブスクリプションが `paid` になり、50 USD の請求書が作成されたことを確認します。
- サイクルを 1 つ (月次サブスクリプションの場合は 2 月 8 日まで) 進めて、サブスクリプションが更新されることを確認します。

### テストクロックなしでトライアル期間をテストする

全トライアル期間が終わるのを待たずに実装でトライアル期間がどのように処理されるかをテストするには、`trial_end` 値を数分後に設定して新しい*サブスクリプション* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis)を作成します。Checkout を使用する場合は、[trial_end](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-trial_end) 値を 2 日以上に設定してください。

この方法を使用すると、`customer.subscription.trial_will_end` イベント通知 (トライアルが終了する 3 日前に送信) は表示されません。他の点はすべて、通常のトライアル期間の長いサブスクリプションと同じように動作します。

## サブスクリプションの Webhook 通知をテストする

サブスクリプションの実装は *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) に依存しています。サーバーに Webhook エンドポイントを設定し、監視するイベント通知を指定します。Stripe は、サブスクリプションのアップグレードやキャンセルなどのイベントに対する通知を送信します。

実際のテストサブスクリプションを作成するか、[Stripe CLI](https://docs.stripe.com/cli.md) または[ダッシュボード](https://dashboard.stripe.com/test/account/webhooks)を使用してイベント通知をトリガーし、Webhook をテストできます。

Stripe CLI を設定し、Stripe アカウントに関連付けてから、[サブスクリプションのライフサイクル](https://docs.stripe.com/billing/subscriptions/overview.md#subscription-lifecycle)でイベントをトリガーして、Webhook の組み込みをテストできます。Stripe CLI を使用してイベントをトリガーする場合、サーバーでイベント通知の着信を確認できます。これにより、ネットワークトンネルやファイアウォールを介することなく、Webhook の組み込みを直接確認できます。

Stripe CLI またはダッシュボードを使用してイベントをトリガーすると、Webhook が受信するイベントには、サブスクリプション情報と関連がない架空のデータが格納されます。Webhook 通知をテストする最も信頼できる方法は、実際のテストサブスクリプションを作成し、対応するイベントを処理することです。

以下の表には、サブスクリプションに関連する最も一般的なイベントと、該当する場合は、それらのイベントを処理するための推奨アクションが示されています。

> Accounts v2 API は、Connect ユーザー向けに GA になり、その他の Stripe ユーザー向けには公開プレビューになります。
> 
> 顧客を表すのに [Accounts v2](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) オブジェクトまたは [Customer](https://docs.stripe.com/api/customers.md) オブジェクトのいずれを使用する場合でも、`customer.subscription` イベントを使用してサブスクリプションイベントを追跡します。

| イベント | 説明 |
| --- | --- |
| `v2.core.account.created` | [v2 Account](https://docs.stripe.com/api/v2/core/accounts/object.md) が正常に作成されたときに送信されます。 |
| `customer.created` | [Customer (顧客)](https://docs.stripe.com/api/customers/object.md)の作成に成功すると送信されます。 |
| `customer.subscription.created` | サブスクリプションが作成されると送信されます。決済を完了するために顧客の認証が必要な場合、または `payment_behavior` を [default_incomplete](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) に設定した場合、サブスクリプションの `status` が `incomplete` になる場合があります。 |
| `customer.subscription.deleted` | 顧客のサブスクリプションが終了すると送信されます。 |
| `customer.subscription.paused` | サブスクリプションの `status` が `paused` に変更されたときに送信されます。たとえば、決済手段がないまま[トライアル期間が終了する](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#create-free-trials-without-payment)とサブスクリプションを一時停止するように[設定した場合](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-trial_settings-end_behavior-missing_payment_method)に、このイベントを送信します。サブスクリプションが[再開される](https://docs.stripe.com/api/subscriptions/resume.md)まで、請求処理は行われません。請求書はその期間中も作成され続けるため、[決済の回収を一時停止する](https://docs.stripe.com/billing/subscriptions/pause-payment.md)場合、このイベントは送信されません。 |
| `customer.subscription.resumed` | 以前に `paused` ステータスだったサブスクリプションを再開すると送信されます。これは、[決済の回収](https://docs.stripe.com/billing/subscriptions/pause-payment.md#unpausing)の一時停止を解除した場合には適用されません。 |
| `customer.subscription.trial_will_end` | [トライアル期間が終了する ](https://docs.stripe.com/billing/subscriptions/trials.md)3 日前に送信されます。トライアルが 3 日未満の場合も、このイベントがトリガーされます。 |
| `customer.subscription.updated` | サブスクリプションが開始または[変更](https://docs.stripe.com/billing/subscriptions/change.md)された場合に送信されます。たとえば、サブスクリプションの更新、クーポンの追加、割引の適用、請求書アイテムの追加、プランの変更はすべて、このイベントのトリガーとなります。 |
| `entitlements.active_entitlement_summary.updated` | 顧客の有効なエンタイトルメントが更新されると送信されます。このイベントを受け取ると、商品の機能へのアクセスをプロビジョニングまたはデプロビジョニングすることができます。[エンタイトルメントの導入](https://docs.stripe.com/billing/entitlements.md)の詳細をご覧ください。 |
| `invoice.created` | 新規または更新済みのサブスクリプションに対して請求書が作成されると送信されます。Stripe で `invoice.created` に対する成功レスポンスを受信できない場合、[自動請求](https://docs.stripe.com/invoicing/integration/automatic-advancement-collection.md)で指定されたすべての請求書の確定が最大 72 時間遅延します。詳しくは、[請求書の確定](https://docs.stripe.com/invoicing/integration/workflow-transitions.md#finalized)をご覧ください。
- [Finalize an Invoice (請求書の確定)](https://docs.stripe.com/api/invoices/finalize.md) API にリクエストを送信することで通知に応答します。 |
| `invoice.finalized` | 請求書の確定に成功し、支払いの準備が整うと送信されます。
- 顧客に請求書を送信できます。詳しくは、[請求書の確定](https://docs.stripe.com/invoicing/integration/workflow-transitions.md#finalized)をご覧ください。
- 設定に応じて、Stripe は自動的にデフォルトの支払い方法に請求するか、回収を試みます。詳しくは、[確定後のメール](https://docs.stripe.com/invoicing/integration/workflow-transitions.md#emails)をご覧ください。 |
| `invoice.finalization_failed` | 請求書の確定に失敗しました。[請求書の確定の失敗を処理する方法](https://docs.stripe.com/tax/customer-locations.md#finalizing-invoices-with-finalization-failures)と[請求書の確定](https://docs.stripe.com/invoicing/integration/workflow-transitions.md#finalized)の詳細を見る。
- 請求書の [last_finalization_error](https://docs.stripe.com/api/invoices/object.md#invoice_object-last_finalization_error) を調べて、エラーの原因を特定します。
- Stripe Tax を使用している場合は、`Invoice` オブジェクトの[automatic_tax](https://docs.stripe.com/api/invoices/object.md#invoice_object-last_finalization_error) フィールドを確認してください。
- `automatic_tax[status]=requires_location_inputs` の場合、請求書を確定させることはできず、決済を回収できません。顧客に通知し、必要な[顧客の住所情報](https://docs.stripe.com/tax/customer-locations.md)を回収します。
- `automatic_tax[status]=failed` の場合、後でリクエストを再試行します。 |
| `invoice.paid` | 請求書の支払いに成功すると送信されます。このイベントを受け取り、サブスクリプションの `status` が `active` になると、商品へのアクセスを提供できます。 |
| `invoice.payment_action_required` | 請求書に顧客の認証を必要とする場合に送信されます。請求書で[アクションが必要](https://docs.stripe.com/billing/subscriptions/overview.md#requires-action)な場合にサブスクリプションを処理する方法をご紹介します。 |
| `invoice.payment_failed` | 請求書に対する決済が失敗しました。PaymentIntent のステータスは`requires_action` に変わります。サブスクリプションのステータスは、サブスクリプションの最初の請求書に対して_のみ_ `incomplete` のままになります。決済が失敗した場合、以下のような処理を行います。

- 顧客に通知します。
- ダッシュボードで[サブスクリプション設定](https://dashboard.stripe.com/settings/billing/automatic)を行い、[Smart Retries](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md) およびその他の売上の回収機能を有効にします。
- PaymentIntent を使用している場合、新しい支払情報を収集し、[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) を更新します。 |
| `invoice.upcoming` | サブスクリプションの更新の数日前に送信されます。何日前に送信されるかについては、[ダッシュボード](https://dashboard.stripe.com/settings/billing/automatic)の**次回の更新イベント**に設定された数値を参照します。既存のサブスクリプションについては、日数の変更は次の請求期間から有効になります。必要に応じて、[追加の請求書アイテム](https://docs.stripe.com/billing/invoices/subscription.md#adding-upcoming-invoice-items)を加えることもできます。 |
| `invoice.updated` | 決済が成功または失敗したときに送信されます。決済が成功した場合、`paid` 属性は `true` に設定され、`status` は `paid` になります。決済が失敗した場合、`paid` は `false` に設定され、`status` は `open` のままになります。決済の失敗では、`invoice.payment_failed` イベントもトリガーされます。 |
| `payment_intent.created` | [PaymentIntent](https://docs.stripe.com/api/payment_intents.md) が作成されると送信されます。 |
| `payment_intent.succeeded` | PaymentIntent が正常に支払いを完了すると送信されます。 |
| `subscription_schedule.aborted` | サブスクリプションスケジュールが、支払いの滞納により関連するサブスクリプションが終了となったことが原因でキャンセルされた場合に送信されます。 |
| `subscription_schedule.canceled` | サブスクリプションスケジュールがキャンセルされ、それに関連するアクティブなサブスクリプションもキャンセルされた場合に送信されます。 |
| `subscription_schedule.completed` | サブスクリプションスケジュールのすべての[フェーズ](https://docs.stripe.com/billing/subscriptions/subscription-schedules.md#subscription-schedule-phases)が完了した場合に送信されます。 |
| `subscription_schedule.created` | 新しいサブスクリプションスケジュールが作成された場合に送信されます。 |
| `subscription_schedule.expiring` | サブスクリプションスケジュールが無効になる 7 日前に送信されます。 |
| `subscription_schedule.released` | サブスクリプションスケジュールがサブスクリプションから[リリース](https://docs.stripe.com/api/subscription_schedules/release.md)されたとき、または停止され関連付けが解除されたときに送信されます。サブスクリプションはその後も残ります。 |
| `subscription_schedule.updated` | サブスクリプションスケジュールが更新された場合に送信されます。 |

## 支払いの失敗をテストする

特定の[テストクレジットカード番号](https://docs.stripe.com/testing.md#cards)を使用して、サブスクリプションと*請求書* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice)の支払いの失敗をトリガーします。

一部のサブスクリプションの更新により、Stripe はサブスクリプションの請求書を作り、すぐに支払いを行います (この同期支払いは、初回の請求書または特定の請求書の更新で発生する可能性があります)。この試行が失敗した場合、サブスクリプションは `incomplete` ステータスで作成されます。

アクティブなサブスクリプションに対する決済の失敗の影響をテストするには、顧客のデフォルトの決済手段として [**4000 0000 0000 0341**](https://docs.stripe.com/testing.md#cards) カードを関連付けますが、トライアル期間を使用して試行を遅らせます (数秒または数分のトライアルで十分です)。サブスクリプションはすぐにアクティブになり、トライアル期間が終了すると[下書き請求書](https://docs.stripe.com/invoicing/overview.md#draft)が作成されます。請求書のステータスが open に変わるまでにおよそ 1 時間かかり、その時点で決済の回収が試行され、失敗します。

[テストクロック](https://docs.stripe.com/billing/testing/test-clocks.md)を使用して、*サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)内で時間の進行をシミュレートできます。これにより、Subscriptions などの Billing リソースのステータスが変化し、*Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) イベントがトリガーされます。その結果、四半期または年次更新における決済の失敗を実装でどのように処理するかを、1 年待つことなく確認できます。

## 3D セキュアを必要とする支払いをテストする

[**4000 0027 6000 3184**](https://docs.stripe.com/testing.md#three-ds-cards) カードを使用して、サブスクリプションと請求書の 3D Secure トリガーをシミュレーションします。

3D セキュア認証フローがトリガーされると、開いた 3DS ダイアログで支払いの認証または失敗をテストできます。支払いが正常に認証されると、請求書が支払われます。請求書が `incomplete` ステータスであるサブスクリプションに属する場合、そのサブスクリプションは有効になります。支払いの試行が失敗すると、認証が成功せず、請求書は `open` のままになります。

## 請求書に対する銀行振込による支払いをテストする

銀行振込による請求書の手動支払いをテストする手順は、以下のとおりです。

1. サンドボックスで請求書を作成し、回収方法を `send_invoice` に設定した後、`payment_settings[payment_method_types]` 配列を `[customer_balance]` に設定します。
2. ダッシュボードで請求書を見つけ、**送信**をクリックします。
3. お客様の顧客が固有の仮想銀行口座番号を割り当てられると、その番号は [Funding Instructions API](https://docs.stripe.com/payments/customer-balance/funding-instructions.md#create-funding-instructions) を使って取得できます。オンライン請求書ページや PDF でもこの仮想銀行口座番号の詳細を確認することができます。

## インボイスとサブスクリプションのデフォルトの決済手段をテスト

特定の[テストカード ID](https://docs.stripe.com/testing.md?testing-method=payment-methods#cards)を使用して、サブスクリプションとインボイスに使用されるデフォルトの決済手段をシミュレーションします。

指定した支払い方法は、`default_payment method` として設定しているサブスクリプションまたはインボイスの顧客に関連付ける必要があります。たとえば、`pm_card_visa` を使用して Visa のテスト用の決済手段を作成する場合は、以下のようにします。

1. `pm_card_visa` と、サブスクリプションまたはインボイスの対象の顧客を指定して、[PaymentMethod Attach](https://docs.stripe.com/api/payment_methods/attach.md) エンドポイントを呼び出します
2. 結果として得られた決済手段 ID を使用し、この ID を `default_payment_method` と指定してサブスクリプションまたはインボイスを作成します。

ここで、サブスクリプションまたはインボイスでこの決済手段に請求します。

サブスクリプションとインボイスに[デフォルトの決済手段](https://docs.stripe.com/testing.md?testing-method=payment-methods#cards)を使用する方法をご紹介します。

## 顧客の納税者番号確認をテストする

これらの魔法の納税者番号を使用して、テスト環境で特定の確認条件をトリガーします。納税者番号のタイプは、オーストラリア事業者登録番号 (ABN)、EU VAT 番号、またはイギリスの付加価値税 (GB VAT) 番号である必要があります。

| 番号 | タイプ |
| --- | --- |
| `000000000` | 本人確認成功 |
| `111111111` | 本人確認に失敗 |
| `222222222` | 確認は無期限に保留中のままになります |

## 自動化されたテスト

実装に[自動化されたテスト](https://docs.stripe.com/automated-testing.md)を設定できます。テストを最適化するには、以下のようにします。

- サンドボックス内のサブスクリプション関連データについては、[データ保持ポリシー](https://support.stripe.com/questions/test-mode-subscription-data-retention)が適用されることに注意してください。
- テスト間で[クーポン](https://docs.stripe.com/api/coupons.md)や[プロモーションコード](https://docs.stripe.com/api/promotion_codes.md)などのリソースを再利用しないでください。
- [stripe-mock](https://github.com/stripe/stripe-mock) HTTP サーバーを使用します。これは、Stripe API を使用し API の動作をよく反映します。

## See also

- [サンドボックス](https://docs.stripe.com/sandboxes.md)
- [複数のアカウント](https://docs.stripe.com/get-started/account/multiple-accounts.md)
