# Stripe Terminal をテストする Terminal の組み込みを効果的にテストする方法をご紹介します。 > Stripe Terminal をテストするプロセスの大半は、Stripe のオンライン決済のテストと類似しています。また、テスト環境では Stripe Terminal でモバイルウォレット (Apple Pay や Google Pay など) を使用することはできません。詳細については、[Stripe の一般テストガイド](https://docs.stripe.com/testing.md)をご覧ください。 Terminal のデプロイを成功させる最善の方法は、システムの各部分をテストすることです。Stripe は各ステージ用のテストツールを用意しています。 1. リーダーを注文する前に、リーダーシミュレーターで組み込みをテストします。 1. 物理テストカードでハードウェアの組み込みをテストします。 ## シミュレーションされたリーダー - [discoverReaders (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#discover-readers) - [DiscoveryConfiguration (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPDiscoveryConfiguration.html) - [DiscoveryConfiguration (Android)](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-discovery-configuration/index.html) - [Discover リーダー](https://docs.stripe.com/api/terminal/readers/list.md) Stripe Terminal SDK およびサーバー主導型の連携にはシミュレーションされた内蔵カードリーダーが付属しているため、物理ハードウェアに接続することなくアプリを開発してテストすることができます。連携が完了している場合も、構築中であっても、シミュレーションされたリーダーを使用してアプリ内のすべての Terminal フローをエミュレートします。 シミュレーション済みのリーダーには UI が表示されません。アプリで接続した後、Stripe SDK または API への呼び出しが成功すると、これが機能していることを確認できます。 SDK のシミュレーションされたリーダーは、必要に応じて自動的にカード提示をシミュレーションします。サーバー主導型のシステムでは、構築済みのシステムを更新して、[カード提示をシミュレーションします](https://docs.stripe.com/terminal/references/testing.md#simulated-card-presentment)。 ## シミュレーションされたテストカード - [SimulatorConfiguration (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPSimulatorConfiguration.html) - [SimulatorConfiguration (Android)](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-simulator-configuration/index.html) シミュレーションされたリーダーは、シミュレーションされたテストカードを使用するよう設定できます。これにより、POS アプリケーション内のさまざまなフローをテストできるようになります。 決済手段を収集する前に、シミュレーションされたリーダーを以下のいずれかのテストカード番号またはテスト決済手段のいずれかで特定した応答を生成するように設定してください。収集ステップ中に設定された設定 (例えばテストカード番号) は 30 分間永続化されます。つまり、次の確認ステップは同じ構成を使い、明示的にパスしなくても同じ構成になります。確認コールで渡される構成は、コレクトステップのキャッシュ値よりも優先されます。 ### 標準的なテストカード | テストカード番号 | テスト決済手段 | ブランド | | ------------------- | ----------------------------------- | ---------------------------------- | | 4242424242424242 | `visa` | Visa | | 4000056655665556 | `visa_debit` | Visa (デビット) | | 5555555555554444 | `mastercard` | Mastercard | | 5200828282828210 | `mastercard_debit` | Mastercard (デビット) | | 5105105105105100 | `mastercard_prepaid` | Mastercard (プリペイド) | | 378282246310005 | `amex` | アメリカン・エキスプレス | | 371449635398431 | `amex2` | アメリカン・エキスプレス | | 6011111111111117 | `discover` | Discover | | 6011000990139424 | `discover2` | Discover | | 3056930009020004 | `diners` | ダイナースクラブ | | 36227206271667 | `diners_14digits` | ダイナースクラブ (14 桁のカード) | | 3566002020360505 | `jcb` | JCB | | 6200000000000005 | `unionpay` | 銀聯 | | 4506445006931933 | `interac` | Interac | | 6280000360000978 | `eftpos_au_debit` | eftpos オーストラリア | | 4000050360000001 | `eftpos_au_visa_debit` | eftpos オーストラリア/Visa | | 5555050360000080 | `eftpos_au_mastercard_debit` | eftpos オーストラリア/Mastercard | | 4000002500001001 | `cartes_bancaires_visa_debit` | Cartes Bancaires (CB) / Visa | | 5555552500001001 | `cartes_bancaires_mastercard_debit` | Cartes Bancaires (CB) / Mastercard | | 4711009900000316877 | `girocard_debit` | Girocard | ### 特定の成功のためのテストカード | テストカード番号 | テスト決済手段 | 結果 | | ---------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 4001007020000002 | `offline_pin_cvm` | カード保有者が*オフライン PIN* (Offline PIN is a card verification method for EMV chip cards. These cards store the PIN securely on the chip itself, so PIN verification can occur without a network connection) の入力を求められるフローがシミュレーションされます。結果として得られる支払いでは、[cardholder_verification_method](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-receipt-cardholder_verification_method) が `offline_pin` に設定されます。 | | 4000008260000075 | `offline_pin_sca_retry` | [SCA](https://docs.stripe.com/strong-customer-authentication.md) によってトリガーされる再試行フローがシミュレーションされます。カード保有者が最初の非接触型決済に失敗すると、リーダーがユーザーにカードを挿入して*オンライン PIN* (Online PIN is a card verification method for EMV chip cards. These cards require the terminal to contact the issuer over a network connection to verify the PIN) を入力するように求めます。結果として得られる支払いでは、[cardholder_verification_method](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-receipt-cardholder_verification_method) が `offline_pin` に設定されます。 | | 4001000360000005 | `online_pin_cvm` | カード保有者にメッセージが表示され、カード保有者が*オンライン PIN* (Online PIN is a card verification method for EMV chip cards. These cards require the terminal to contact the issuer over a network connection to verify the PIN) を入力する操作がシミュレーションされます。結果として得られる支払いでは、[cardholder_verification_method](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-receipt-cardholder_verification_method) が `online_pin` に設定されます。 | | 4000002760000008 | `online_pin_sca_retry` | [SCA](https://docs.stripe.com/strong-customer-authentication.md) によってトリガーされる再試行フローがシミュレーションされます。このフローでは、カード保有者の初回の非接触型支払いが失敗し、リーダーから、ユーザーに*オンライン PIN* (Online PIN is a card verification method for EMV chip cards. These cards require the terminal to contact the issuer over a network connection to verify the PIN) の入力が求められます。最終的な支払いで、[cardholder_verification_method](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card_present-receipt-cardholder_verification_method) が `online_pin` に設定されます。 | ### 特定のエラーのためのテストカード > [請求せずに直接保存する](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md)ために上記のカードを使用すると、[SetupIntents](https://docs.stripe.com/api/setup_intents.md) で、[setup_intent_authentication_failure](https://docs.stripe.com/error-codes.md#setup-intent-authentication-failure) レスポンスが返されます。 | テストカード番号 | テスト決済手段 | 結果 | | ---------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 4000000000000002 | `charge_declined` | 支払いは `card_declined` コードで拒否されます。 | | 4000000000009995 | `charge_declined_insufficient_funds` | 支払いは `card_declined` コードで拒否されます。[decline_code](https://docs.stripe.com/declines/codes.md) 属性は `insufficient_funds` です。 | | 4000000000009987 | `charge_declined_lost_card` | 支払いは `card_declined` コードで拒否されます。[decline_code](https://docs.stripe.com/declines/codes.md) 属性は `lost_card` です。 | | 4000000000009979 | `charge_declined_stolen_card` | 支払いは `card_declined` コードで拒否されます。[decline_code](https://docs.stripe.com/declines/codes.md) 属性は `stolen_card` です。 | | 4000000000000069 | `charge_declined_expired_card` | 支払いは `expired_card` コードで拒否されます。 | | 4000000000000119 | `charge_declined_processing_error` | 支払いは `processing_error` コードで拒否されます。 | | 4000000000005126 | `refund_fail` | 決済は成功しますが、[キャプチャーされた決済の返金](https://docs.stripe.com/refunds.md#failed-refunds) は、`failure_reason` (`expired_or_canceled_card`) で非同期的に失敗します。返金は非同期的に失敗するため、返金する最初は成功したように表示され、後続の取得では `失敗` したステータスのみが返されます。また、`refund.failed` [Webhook](https://docs.stripe.com/api/events/types.md#event_types-refund.failed) イベントを使用して返金する失敗も通知されます。 | ## シミュレーションされたカード提示 サーバー主導型の実装を使用する場合、リーダーでのカード保有者のタップまたはリーダーへのカードの挿入をシミュレーションするには、[present_payment_method](https://docs.stripe.com/api/terminal/readers/present_payment_method.md) エンドポイントを使用します。 ```curl curl -X POST https://api.stripe.com/v1/test_helpers/terminal/readers/tmr_xxx/present_payment_method \ -u "<>:" ``` ```json { "id": "tmr_xxx", "object": "terminal.reader", "action": { "failure_code": null, "failure_message": null, "process_payment_intent": { "payment_intent": "pi_xxx" }, "status": "succeeded", "type": "process_payment_intent" }, … } ``` パラメーターを指定しない場合、シミュレーションされた支払いは、PaymentIntent の支払い方法のタイプに基づき、デフォルトで有効な[テストカード](https://docs.stripe.com/terminal/references/testing.md#standard-test-cards)になります。以下は、Terminal 支払い方法タイプ用のデフォルトのテストカードです。 | 支払い方法のタイプ | テストカード番号 | テスト決済手段 | | ---------------------------------- | ---------------- | --------- | | `card_present` | 4242424242424242 | `visa` | | `card_present` と `interac_present` | 4242424242424242 | `visa` | | `interac_present` | 4506445006931933 | `interac` | [標準的なテストカード](https://docs.stripe.com/terminal/references/testing.md#standard-test-cards)では、[テスト金額](https://docs.stripe.com/terminal/references/testing.md#physical-test-cards)を使用して失敗シナリオをシミュレーションすることもできます ## シミュレーションされたリーダーの更新 シミュレーションされた Bluetooth リーダーに接続している間に、シミュレーションされたリーダーの更新を設定できます。 #### iOS `Terminal.shared.simulatorConfiguration.availableReaderUpdate` を以下のいずれかに設定します。`connectReader` を呼び出すと、シミュレーション済みのリーダーの更新がトリガーされます。 | 設定の更新 | 結果 | | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SimulateReaderUpdateNone` | 更新はないため、ユーザに何も伝える必要はありません。 | | `SimulateReaderUpdateRequired` | 必須の更新が提供され、更新に 1 分かかります。`BluetoothReaderDelegate` は `didStartInstallingUpdate` コールバックを受信します。 | | `SimulateReaderUpdateRequiredForOffline` | 期日を過ぎている必須の更新があり、更新には 1 分かかります。[オフライン](https://docs.stripe.com/terminal/features/operate-offline/collect-card-payments.md?terminal-card-present-integration=terminal&terminal-sdk-platform=ios&reader-type=simulated#connect-while-offline)で操作する場合、リーダーの接続は利用できません。`BluetoothReaderDelegate` は `didStartInstallingUpdate` コールバックを受信します。 | | `SimulateReaderUpdateAvailable` | オプションの更新を利用できます。更新が利用可能であることをユーザーに伝え、`requiredAt` の日付をハイライト表示します。 | | `SimulateReaderUpdateLowBattery` | 必要な更新のインストールが開始されますが、リーダーのバッテリー残量が少ないため失敗します。リーダーへの接続も失敗します。これにより、以前のバージョンのソフトウェアを実行するリーダーがシミュレーションされます。 | | `SimulateReaderUpdateLowBatterySucceedConnect` | 必要な更新のインストールが開始されますが、リーダーのバッテリー残量が少ないため失敗します。リーダーへの接続は成功します。これにより、現在でも使用可能なソフトウェアの最新バージョンを実行するリーダーがシミュレーションされます。リーダーに再度接続するときに、更新のインストールが再試行されます。 | | `SimulateReaderUpdateRandom` | 上記のシナリオのランダムな選択。 | #### Android `update` フィールドを以下のいずれかに設定した `SimulatorConfiguration` の新しいインスタンスに、`Terminal.getInstance().simulatorConfiguration` を設定します。`connectReader` を呼び出すと、シミュレーション済みのリーダーの更新がトリガーされます。 | 設定の更新 | 結果 | | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `NONE` | 更新はないため、ユーザに何も伝える必要はありません。 | | `REQUIRED` | 必須の更新が提供されている場合は、更新に 1 分かかります。`MobileReaderListener` は `onStartInstallingUpdate` コールバックを受信します。 | | `REQUIRED_FOR_OFFLINE` | 必須アップデートの期限が過ぎており、適用には 1 分ほどかかります。端末が[オフライン](https://docs.stripe.com/terminal/features/operate-offline/collect-card-payments.md?terminal-card-present-integration=terminal&terminal-sdk-platform=android&reader-type=simulated#connect-while-offline)の場合はリーダーに接続できません。このとき、`MobileReaderListener` に `onStartInstallingUpdate` コールバックが通知されます。 | | `UPDATE_AVAILABLE` | オプションの更新を利用できます。更新が利用可能であることをユーザーに伝え、`requiredAt` の日付をハイライト表示します。 | | `LOW_BATTERY` | 必要な更新のインストールが開始されますが、リーダーのバッテリー残量が少ないため失敗します。リーダーへの接続も失敗します。これにより、以前のバージョンのソフトウェアを実行するリーダーがシミュレーションされます。 | | `LOW_BATTERY_SUCCEED_CONNECT` | 必要な更新のインストールが開始されますが、リーダーのバッテリー残量が少ないため失敗します。リーダーへの接続は成功します。これにより、現在でも使用可能なソフトウェアの最新バージョンを実行するリーダーがシミュレーションされます。リーダーに再度接続するときに、更新のインストールが再試行されます。 | | `RANDOM` | 上記のシナリオのランダムな選択。 | #### React Native `update` フィールドが以下のいずれかに設定された `useStripeTerminal` の初期化されたインスタンスから返された `simulateReaderUpdate()` を呼び出します。`connectReader` を呼び出すと、シミュレーションされたリーダーの更新がトリガーされます。 | 設定の更新 | 結果 | | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | `none` | 更新はないため、ユーザーに何も伝える必要はありません。 | | `required` | 必須の更新が提供され、更新に 1 分かかります。`useStripeTerminal` インスタンスが `onDidStartInstallingUpdate` コールバックを受信します。 | | `requiredForOffline` | 必須アップデートが期限超過しており、適用には 1 分ほどかかります。端末がオフラインの場合はリーダーに接続できません。このとき、`useStripeTerminal` インスタンスに `onDidStartInstallingUpdate` コールバックが通知されます。 | | `available` | オプションの更新を利用できます。更新が利用可能であることをユーザーに伝え、`requiredAt` の日付をハイライト表示します。 | | `lowBattery` | 必要な更新のインストールが開始されますが、リーダーのバッテリー残量が少ないため失敗します。リーダーへの接続も失敗します。これにより、以前のバージョンのソフトウェアを実行するリーダーがシミュレーションされます。 | | `lowBatterySucceedConnect` | 必要な更新のインストールが開始されますが、リーダーのバッテリー残量が少ないため失敗します。リーダーへの接続は成功します。これにより、現在でもサポートされているソフトウェアの最新バージョンを実行するリーダーがシミュレーションされます。リーダーに再度接続するときに、更新のインストールが再試行されます。 | | `random` | 上記のシナリオのランダムな選択。 | ## テスト用の法人カード 物理テストクレジットカードを使用して、Stripe Terminal リーダーで Payments をテストします。[Stripe ダッシュボード](https://dashboard.stripe.com/terminal/shop)の Terminal タブからリーダーと物理テストカードを購入できます。[B2](https://b2ps.com/product-category/b2-payment-testing-products/) などのプロバイダーの物理テストカードもサポートしています。 このテスト用の法人カードは、チップ型および非接触型のどちらの決済にも対応しています。Stripe の認証済みリーダーで、[サンドボックス](https://docs.stripe.com/sandboxes.md)の Stripe API に対してのみ機能します。テスト用の法人カードを本番環境で使用しようとすると、Stripe API はエラーを返します。特に記載がない限り、要求された場合は PIN `1234` を使用してください。 テスト用の物理クレジットカードを使用して決済を作成する際は、末尾が以下の値になる金額を使用して特定のレスポンスを生成します。 | 小数 | 結果 | | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **00** | 支払いは承認されます。 | | **01** | 支払いは `call_issuer` コードで拒否されます。 | | **02** | カード保有者向けの画面を備えたリーダーを使用する場合、テストカードを挿入 (または、サポートされている場合はタップ) します。カードに PIN が必要な場合、支払いは `offline_pin_required` で拒否され、リーダーがチップ型に対応していれば PIN の入力が要求されます。`1234` を入力してテスト支払いを完了します。 | | **03** | カード保有者向けの画面を備えたリーダーを使用する場合、テストカードを挿入 (または、サポートされている場合はタップ) します。カードで PIN が求められる場合、支払いは `online_or_offline_pin_required` で拒否され、PIN の入力が要求されます。任意の 4 桁の PIN を入力してテスト支払いを完了します。 | | **05** | 支払いは `generic_decline` コードで拒否されます。 | | **55** | 支払いは `incorrect_pin` コードで拒否されます。 | | **65** | 支払いは `withdrawal_count_limit_exceeded` コードで拒否されます。 | | **75** | 支払いは `pin_try_exceeded` コードで拒否されます。 | たとえば、物理的なテストカードを使用して処理された「25.00 USD」の支払いは成功しますが、「10.05 USD」の支払いは拒否されます。 > 通貨によっては、小数[がゼロ](https://docs.stripe.com/currencies.md#zero-decimal)のものもあります。これらの通貨では、上の表の小数点以下 2 桁を、一番右の 2 桁として使用します。 > > たとえば、支払いが `generic_decline` コードで拒否されるようにするには、_「105 JPY」_の金額が必要です。 ### Interac テストカード (カナダのみ) Interac の導入をテストするには、シミュレーションされた `interac` テストカード、または *「Interac の物理テストカード」* を使用できます。このカードは、ダッシュボードの [Terminal ハードウェアショップ](https://dashboard.stripe.com/terminal/shop)で注文できます。Stripe ブランドの物理テストカードは、Interac クレジットカードとして使用できません。 Interac テストカードは、`interac_present` 支払いと `interac_present` 返金の両方で機能します。`card_present` 支払いをテストする際に使用するのと同じ[テスト金額](https://docs.stripe.com/terminal/references/testing.md#physical-test-cards)を使用できます。特に記載がない限り、要求された場合は PIN `1234` を使用してください。拒否された返金をテストするには、末尾が `01`、`05`、`55`、`65` または `75` の金額で一部返金を作成します。 > Interac テストカードは、非接触型決済に対応していません。 ### eftpos テストカード (オーストラリアのみ) eftpos の導入をテストするには、シミュレーションされた `eftpos` テストカード、または _eftpos の物理テストカード _ を使用できます。このカードは、ダッシュボードの [Terminal ハードウェアショップ](https://dashboard.stripe.com/terminal/shop)で注文できます。Stripe ブランドの物理テストカードは、`eftpos` カードとして使用できません。 `card_present` 支払いをテストする際に使用するのと同じ[テスト金額](https://docs.stripe.com/terminal/references/testing.md#physical-test-cards)を使用できます。特に記載がない限り、要求された場合は PIN `1234` を使用してください。 ## See also - [注文する](https://docs.stripe.com/terminal/fleet/order-and-return-readers.md) - [導入のチェックリスト](https://docs.stripe.com/terminal/references/checklist.md) - [追加の決済手段をテスト](https://docs.stripe.com/terminal/payments/additional-payment-methods.md#testing)