# ユースケースをテストする 導入をテストする方法をご紹介します。 *サンドボックス* (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)は、Stripe のテスト環境です。実際に請求や決済を行うことなく、連携をテストできます。サンドボックスでは、実際の取引に影響を与えたり実際の資金を動かしたりすることなく、実際のオブジェクトの作成をシミュレーションできます。サンドボックスには、アカウント選択機能を使用するか、[ダッシュボードの Sandboxes ページ](https://dashboard.stripe.com/sandboxes)からアクセスできます。テストプロセスに役立てるため、[品質保証 (QA) テストのユースケース](https://docs.stripe.com/testing-use-cases.md#testing-use-cases)を使用し、[Postman コレクション](https://docs.stripe.com/testing-use-cases.md#postman-collection)をインポートすることをお勧めします。 ## テスト環境 サンドボックスでは、テスト用クレジットカードに請求できるほか、テスト用の商品や価格を作成できます。また、取引をシミュレーションして、連携が正しく機能することを確認できます。これにより、実際の決済で本番環境へ移行する前に、Stripe 実装のバグやエラーを特定できます。 Stripe アカウントを作成すると、Stripe はそのアカウントをサンドボックスに配置します。一連の[テスト API キー](https://docs.stripe.com/keys.md#obtain-api-keys)は、Stripe ダッシュボードのホームページまたは API キーのページで確認できます。これらの API キーを使用して Stripe API にリクエストを送信すると、シミュレーションされたデータを作成および取得できます。 実際の決済の受け付けを開始するには、[Stripe アカウントを設定](https://docs.stripe.com/get-started/account/set-up.md)し、アカウント選択機能でサンドボックスを終了して、連携で本番環境の API キーを使用する必要があります。本番環境のシークレットキーは、シークレットボールトまたは環境変数に保存します。バージョン管理にチェックインするソースコードや設定ファイルにキーを保存しないでください。詳細については、シークレット API キーを管理するための[ベストプラクティス](https://docs.stripe.com/keys-best-practices.md)をご覧ください。 > #### テスト環境サンドボックス使用時の本番環境への影響 > > ダッシュボードで *test mode sandboxes* (Every Stripe account includes the test mode sandbox. It shares some settings with live mode, has characteristics that differ from other sandboxes you create, but you can't delete it) を使用しているときに設定を変更すると、本番環境の設定も変更される可能性があります。ダッシュボードの多くのページでは、通知ボックスが表示され、テスト環境のサンドボックス使用中は本番環境の設定が無効になります。この場合、引き続き有効になっている設定は安全に使用できます。通知が表示されない場合は、テスト環境のサンドボックスで加えた変更は本番環境の設定に影響すると考えてください (テストデータのバナーが表示されている場合を除く)。 ### サンドボックスの比較 Stripe アカウントには、テスト環境のサンドボックスと、追加のサンドボックスを作成する機能が含まれています。テスト環境はサンドボックスですが、作成する一般的なサンドボックスとは異なります。これらの違いを理解することで、テスト戦略の構築に役立ちます。 | | テスト環境のサンドボックス | 一般的なサンドボックス | | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | サンドボックスの数 | 1 つのサンドボックスを使用できます。 | 最大 5 つのサンドボックスを使用できます。テスト環境のサンドボックスは、5 つの上限には含まれません。 | | アクセス制御 | すべてのユーザーに、本番環境と同じ役割とアクセス権を付与できます。 | アクセスをより厳密に制御できます。サンドボックスのアクセスレベルが private に設定されている場合、自動的にアクセスできるのは管理者のみです。本番環境へのアクセスを付与せずに、サンドボックスのみにユーザーを招待できます。サンドボックスのアクセスレベルが all team members に設定されている場合、役割を持つすべてのユーザーに同じ役割とアクセス権が付与されます。 | | 設定 | 本番環境とテスト環境のサンドボックスの間で設定が共有されます。多くの設定を個別にテストすることはできません。 | サンドボックスごとに設定を完全に分離します。作成時に本番環境から設定をコピーし、本番導入とは別にテストします。 | | API の対応状況 | V1 に対応し、[V2 には部分的に対応しています](https://docs.stripe.com/api-v2-overview.md#limitations)。 | V1 と V2 に対応しています。 | | 削除 | 削除できません。 | 削除できます。 | | アプリ | インストールするには、アプリがテスト環境のサンドボックスに対応している必要があります。 | インストールするには、アプリがサンドボックスに対応している必要があります。 | | 製品の制限 | テスト環境のサンドボックスで *IC+* (A pricing plan where businesses pay the variable network cost for each transaction plus the Stripe fee rather than a flat rate for all transactions. This pricing model provides more visibility into payments costs) の料金体系をテストすることはできません。 | サンドボックスで *IC+* の料金体系をテストすることはできません。 | | レート制限 | 一貫した[レート制限](https://docs.stripe.com/rate-limits.md)を維持します。 | 一貫した[レート制限](https://docs.stripe.com/rate-limits.md)を維持します。 | | テストカード番号 | 同じ[テストカード番号](https://docs.stripe.com/testing-use-cases.md#test-card-numbers)を使用します。 | 同じ[テストカード番号](https://docs.stripe.com/testing-use-cases.md#test-card-numbers)を使用します。 | ## サンドボックスと本番環境 Stripe API リクエストはすべて、サンドボックスまたは*本番環境* (Use this mode when you’re ready to launch your app. Card networks or payment providers process payments)のいずれかで行われます。一方の環境の API オブジェクトには、もう一方の環境からアクセスできません。たとえば、テスト環境の[商品オブジェクト](https://docs.stripe.com/api/products/object.md)は、本番環境の決済の一部にすることはできません。 | タイプ | 使用するタイミング | オブジェクト | 使用方法 | 考慮事項 | | ------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | サンドボックス | サンドボックスと関連するテスト API キーを使用してシステムを構築します。サンドボックスでは、カードネットワークとペイメントプロバイダーは決済を処理しません。 | API コールは、シミュレーションされたオブジェクトを返します。たとえば、テストの `account`、`payment`、`customer`、`charge`、`refund`、`transfer`、`balance`、`subscription` オブジェクトを取得して使用することができます。 | [テスト用のクレジットカードとアカウント](https://docs.stripe.com/testing.md#cards)を使用します。実際の支払い方法を受け付けることも、実際のアカウントを処理することもできません。 | [Identity](https://docs.stripe.com/identity.md) による検証チェックは行われません。また、Connect [account (アカウント) オブジェクト](https://docs.stripe.com/api/accounts/object.md)は機密フィールドを返しません。 | | 本番環境 | 実装を立ち上げて実際の支払いを受け付ける準備ができたら、本番環境と関連する本番 API キーを使用します。本番環境では、カードネットワークとペイメントプロバイダーは決済を処理します。 | API コールは、実際のオブジェクトを返します。たとえば、実際の `account`、`payment`、`customer`、`charge`、`refund`、`transfer`、`balance`、`subscription` オブジェクトを取得して使用することができます。 | 実際のクレジットカードを受け付けて、顧客のアカウントを処理します。クレジットカードとアカウントの実際の支払いのオーソリ、支払い、キャプチャーを受け付けることができます。 | 不審請求の申請のフローはより細かく、[テストプロセス](https://docs.stripe.com/testing.md#disputes)はよりシンプルです。また、一部の[支払い方法](https://docs.stripe.com/payments/payment-methods.md)ではフローがさらに細かく、ステップ数が多くなります。 | ダッシュボードでサンドボックスを使用していても、実装コードには影響しません。コードの動作に影響するのは、テスト環境と本番環境の API キーです。 ## 追加のサンドボックスを作成する ダッシュボードで追加のサンドボックスを作成して設定するには、次の手順に従います。 #### サンドボックスを作成する 1. [ダッシュボードのサンドボックスページ](https://dashboard.stripe.com/sandboxes)に移動します。 1. 右上の **作成** をクリックします。 #### アクセスを管理 新しいサンドボックスは、デフォルトではプライベートであり、他のチームメンバーに自動的にアクセス権は付与されません。すべてのチームメンバーにアクセス権を付与できます。 1. [ダッシュボードのサンドボックスページ](https://dashboard.stripe.com/sandboxes)に移動します。 1. サンドボックスのオーバーフローメニュー (⋯) をクリックします。 1. **アクセスの変更**を選択します。 個人レベルのアクセスは、次のいずれかの方法で管理できます。 - [特定のサンドボックス](https://docs.stripe.com/sandboxes/dashboard/manage-access.md#grant-users-access-to-a-specific-sandbox)へのアクセス権を付与します。 - [テスト専用アクセス](https://docs.stripe.com/sandboxes/dashboard/manage-access.md#grant-users-access-for-testing-only)を許可します。 - [すべてのサンドボックス](https://docs.stripe.com/sandboxes/dashboard/manage-access.md#grant-users-access-to-all-sandboxes-in-an-account)へのアクセス権を付与します。 #### サンドボックスの認証情報を取得します これらの認証情報を使用して、実装をサンドボックスに接続します。テスト用に、チームがアクセスできる場所に保存します。 1. サンドボックスのテスト API キーをコピーします。 1. サンドボックスのアカウント ID をコピーします。 #### テスト環境を更新します 以前に作成したテストデータに依存する参照を更新できます。 1. 製品、顧客、サブスクリプション、決済手段など、テストに必要なリソースを設定します。 1. テストプロセスのうち、特定のテストオブジェクト ID に依存する部分を更新します。これは、サンドボックスで新しいオブジェクトを作成するときに変更されます。 #### (オプション) シミュレーションを設定します Billing の実装をテストするためにシミュレーションを設定します。シミュレーションを使用すると、サンドボックス内で時間を進めて、サブスクリプションなどのリソースの状態を変更し、Webhook イベントをトリガーできます。 ## テストカード番号 Stripe は、さまざまな決済シナリオをシミュレーションするために使用できる一連の[テストカード番号](https://docs.stripe.com/testing.md#cards)を提供しています。これらのテストカード番号を使用すると、実際の決済や請求を処理することなく、サンドボックスでシミュレーション用の決済を作成できます。 テストカード番号を使用すると、任意の将来の有効期限と 3 桁のセキュリティコードを入力して、決済の成功をシミュレーションできます。決済の失敗をシミュレーションする場合は、Stripe が提供する特定のテストカード番号とセキュリティコードを使用できます。 テストカード番号はサンドボックスでのみ有効です。実際の決済には使用しないでください。 ## テストデータを削除する すべてのテストデータを Stripe アカウントから削除するには、次の手順を実行してください。 1. 既存の Stripe アカウントを使用して[ダッシュボードにログイン](https://dashboard.stripe.com)します。 1. サンドボックスで **開発者** > **概要** をクリックします。 1. **テストデータ**セクションで、**テストデータをレビュー**をクリックします。このダイアログに、既存のすべてのテストデータオブジェクトのリストが表示されます。 1. **テストデータを削除**をクリックして、削除プロセスを開始します。テストデータの削除を取り消すことはできません。 削除プロセスを実行中、サンドボックスは一時的に利用できなくなります。 > [Meters](https://docs.stripe.com/api/billing/meter.md) オブジェクトは、自動化されたテストデータの削除プロセスでサポートされていないため、手動で削除する必要があります。 ## テストメール デフォルトでは、Stripe はサンドボックスで顧客にメールを送信しません。たとえば、サンドボックスで請求書を決済しても、顧客に領収書メールは送信されません。また、サンドボックスで API を使用して確定した請求書についても、顧客に領収書メールは送信されません。 サンドボックスで Stripe から顧客にメールを送信したい場合は、ダッシュボードで以下を実行できます。 1. 請求書を作成して特定の顧客に手動で送信します。 1. 決済済みの請求書の領収書を手動で送信します。 メールで請求書や領収書を確認する場合は、`Customer` オブジェクトに [Team](https://dashboard.stripe.com/settings/team) のメールアドレスを設定するか、PaymentIntent に `receipt_email` 属性を設定してください。 ## ユースケースをテストする 次の表には、品質保証 (QA) テストのユースケースが含まれています。 | **ユースケース** | **アクション** | | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 請求の成功 (ただちにキャプチャーする場合) | - エラーはありません。 - 請求は、ダッシュボードの[決済](https://dashboard.stripe.com/payments)の下に**成功**として表示されます。 - Stripe が請求をキャプチャーします。 | | PaymentIntent オーソリ成功 ([売上を後で](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)キャプチャー) | ```json { ... "capture_method": "manual", ... "status": "requires_capture", ... } ``` | | PaymentIntent キャプチャー成功 (売上の即時キャプチャーまたは[売上のキャプチャー](https://docs.stripe.com/payments/place-a-hold-on-a-payment-method.md)) | ```json { ... "status": "succeeded", ... } ``` | | 請求の失敗 | 請求は、ダッシュボードの[決済](https://dashboard.stripe.com/payments)の下に**失敗**として表示されます。 ```json { "error": { "charge": "ch_orWziM4j7CiRL8J4", "code": "card_declined", "decline_code": "<>", "doc_url": "https://docs.stripe.com/error-codes#card-declined", "message": "Your card was declined.", "type": "card_error" } } ``` | | Radar によるブロック | 使用する Radar のバージョンに関係なく、[リスクが高い](https://docs.stripe.com/radar/risk-evaluation.md#high-risk)ため、または[ルール](https://docs.stripe.com/radar/rules.md)により、支払いがブロックされる場合があります。レスポンスは、支払いの失敗の場合と同じです。 | | 不審請求が申し立てられた請求 | - 請求は、ダッシュボードの[決済](https://dashboard.stripe.com/payments)の下に**不審請求の申し立て済み**として表示されます。 - Stripe は、残高から請求金額と不審請求の申し立て手数料を引き落とし、関連する `charge.dispute.created` イベントとともに `Dispute` オブジェクトを作成します。 ```json { "object": { "id": "du_orWziM4j7CiRL8J4", "object": "dispute", "charge_id": "ch_orWziM4j7CiRL8J4", ... "status": "needs_response" } } ``` | | 未解決の請求照会 | 照会は不審請求の申し立てと似ていますが、主な相違点は、照会が不審請求の申し立てに発展しない限り、売上が引き落とされないこと、不審請求が申し立てられるまで返金可能なままであること、およびステータスが異なることです。この場合、Stripe は、`charge.dispute.created` イベントを起動します。 ```json { "object": { "id": "du_orWziM4j7CiRL8J4", "object": "dispute", "charge_id": "ch_orWziM4j7CiRL8J4", ... "is_charge_refundable": true, ... "status": "warning_needs_response" } } ``` | | 不審請求の申し立てに対する主張が認められた | - 顧客の不審請求の申し立ての主張が認められた場合、元の請求の売上から不審請求の申し立て手数料が差し引かれた金額がアカウントに戻されます。 - Stripe は、既存の `Dispute` オブジェクトを更新して、`charge.dispute.closed` イベントを起動します。 ```json { "object": { "id": "du_orWziM4j7CiRL8J4", "object": "dispute", "charge_id": "ch_orWziM4j7CiRL8J4", ... "status": "won" } } ``` | | 不審請求の申し立てに対する主張が認められなかった | 顧客が不審請求の申し立てで主張が認められなかった場合、Stripe は、既存の `Dispute` オブジェクトを更新して、`charge.dispute.closed` イベントを起動します。 ```json { "object": { "id": "du_orWziM4j7CiRL8J4", "object": "dispute", "charge_id": "ch_orWziM4j7CiRL8J4", ... "status": "lost" } } ``` | | 照会に対する主張が認められた | 照会で勝訴した場合、照会を最初に開始した際に売上が削除されなかったため、残高は変わりません。Stripe は、既存の `Dispute` オブジェクトを更新し、`charge.dispute.closed` イベントを起動します。 ```json { "object": { "id": "du_orWziM4j7CiRL8J4", "object": "dispute", "charge_id": "ch_orWziM4j7CiRL8J4", ... "status": "warning_closed" } } ``` | | 照会に対する主張が認められなかった | - 照会で敗訴した場合、不審請求の申し立てにエスカレートします。 - 不審請求の申し立てに発展すると、`charge.dispute.updated` イベントでステータスが変わり、売上は `charge.dispute.funds_withdrawn` イベントで引き落とされます。 ```json { "object": { "id": "du_orWziM4j7CiRL8J4", "object": "dispute", "charge_id": "ch_orWziM4j7CiRL8J4", ... "status": "needs_response" } } ``` | | 返金済みの請求 | 請求は、ダッシュボードの[決済](https://dashboard.stripe.com/payments)の下に**返金済み**として表示されます。 ```json { "id": "re_orWziM4j7CiRL8J4", "object": "refund", "amount": "<>", "charge": "ch_orWziM4j7CiRL8J4", ... "payment_intent": "pi_orWziM4j7CiRL8J4", // if you're using PaymentIntents ... "status": "succeeded" } ``` | | 一部返金済みの請求 | - 請求は、ダッシュボードの[決済](https://dashboard.stripe.com/payments)の下に**返金済み**として表示されます。 - 返金額は請求額とは異なります。一部返金済みの請求に対しても不審請求を申し立てることができます。 ```json { "id": "re_orWziM4j7CiRL8J4", "object": "refund", "amount": "<>", "charge": "ch_orWziM4j7CiRL8J4", ... "payment_intent": "pi_orWziM4j7CiRL8J4", // if you're using PaymentIntents ... "status": "succeeded" } ``` | | アカウント残高がマイナスになる | 必ず Stripe でマイナス残高をテストして、銀行口座が Stripe からの引き落としを受け付けられることを確認してください。 | | 成功した入金 | [入金成功](https://docs.stripe.com/api/events/types.md#event_types-payout.paid)時に Webhook を有効にする場合は (推奨)、イベントの処理内容をテストします。 | | 失敗した入金 | [入金失敗](https://docs.stripe.com/api/events/types.md#event_types-payout.failed)に対して Webhook を有効にする場合 (推奨)、イベントの処理内容をテストします。 | ## Stripe の Postman コレクション Postman は、広く利用されている API 開発ツールです。Stripe を導入する際に、導入のサーバー側コンポーネントをテストする際に必要なツールとともに[決済専用の Postman コレクション](https://www.getpostman.com/collections/080102f58f29afa081d7)をご用意しております。 ### コレクションをインポートする まず、Postman アプリにアクセスする必要があります。ブラウザバージョンまたはデスクトップバージョンを使用できます。アプリを起動したら、コレクションをインポートします。 Web でこのプロセスを開始するには、左上隅にある**インポート**ボタンを押してから、**Link** オプションを選択します。[決済コレクション](https://www.getpostman.com/collections/080102f58f29afa081d7)のリンクを挿入します。Postman デスクトップアプリを使用している場合は、**ファイル** > **インポート**をクリックします。インポートに成功すると、コレクションが**コレクション**に表示されます。 ### 回収を使用する このコレクションを使用するには、インポートしたコレクションに移動し、**変数**をクリックします。Stripe ダッシュボードから Stripe サンドボックスのシークレットキーをコピーし、**secret\_key** 行の **Initial Value** (初期値) フィールドに貼り付けます。このステップを完了すると、リクエストを開始できます。 コレクション実行中、スクリプトが他の変数を設定します。たとえば、[customer](https://docs.stripe.com/api/customers/create.md)、[price](https://docs.stripe.com/api/prices/create.md)、[charge](https://docs.stripe.com/api/charges/object.md)、または [PaymentIntent](https://docs.stripe.com/api/payment_intents/object.md) を作成すると、システムはその ID をコレクション内のスクリプトで保存し、返金の発行などの後続リクエストでアクセスできるようになります。 ## See also - [導入内容をテストする](https://docs.stripe.com/testing.md) - [サンドボックス](https://docs.stripe.com/sandboxes.md)