# 3D セキュアを使用して認証する 決済フローに 3D セキュア (3DS) を導入します。 > 主要なカードブランドは 3D セキュア 1 のサポートを終了しました。実装で 3D セキュア 1 を使用している場合は、[Payment Intents](https://docs.stripe.com/api/payment_intents.md) と [Setup Intents](https://docs.stripe.com/api/setup_intents.md) API を使用するように更新してください。これらの API を使用すると、次のようになります。 > > - [3D セキュア 2 (3DS2)](https://stripe.com/guides/3d-secure-2) をサポートします。 - [動的な 3D セキュア](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar)を利用します。 - ヨーロッパの[強力な顧客認証 (SCA)](https://docs.stripe.com/strong-customer-authentication.md) 規制に準拠します。 Web、iOS、Android、React Native など、複数のプラットフォームで 3D セキュア (3DS) 認証を決済フローに導入できます。顧客の銀行が対応している場合は、お客様の組み込みで [3D セキュア 2 (3DS2)](https://stripe.com/guides/3d-secure-2) が実行され、対応していない場合は、3D セキュア 1 でフォールバックします。[スタンドアロンの 3DS](https://docs.stripe.com/payments/3d-secure/standalone-three-d-secure.md) プロダクトを使用して、別の決済サービスプロバイダー (PSP) での取引を取得する際に、Stripe で 3DS 認証を実行することもできます。 #### ウェブ ![決済ページ](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-1-checkout-page.039294e0dee3a6dede8ea8a32185aae5.png) 顧客がカードの詳細情報を入力します。 ![読み取り中の記号](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-2-frictionless-flow.417618d0570c469cfb6bbc43630c7896.png) このステップで顧客の銀行が取引を評価し、3D セキュアを完了することができます。 ![認証モーダル](https://b.stripecdn.com/docs-statics-srv/assets/3ds-flow-3-challenge-flow.9052a220f336bbdb75a51799622c6477.png) 銀行から要求された場合、顧客は追加の認証ステップを実行します。 #### iOS ![決済画面](https://b.stripecdn.com/docs-statics-srv/assets/3ds2-checkout.1cd901263328cbb76020b66c173da8b7.png) 顧客がカードの詳細情報を入力します。 ![読み込み画面](https://b.stripecdn.com/docs-statics-srv/assets/3ds2-loading.f93743ad15b9120027f93f49ed45b26d.png) 顧客の銀行が認証が必要かどうかを確認している間に、SDK が読み込み画面を表示します。 ![チャレンジフロー画面](https://b.stripecdn.com/docs-statics-srv/assets/3ds2-otp.ce1e46e0a853d7d6e3238750a07bca86.png) 銀行から要求された場合、SDK で顧客を認証します。 #### Android ![決済画面](https://b.stripecdn.com/docs-statics-srv/assets/auth-flow-step01-confirm.399f5a4abbd7f303861689d186b79557.png) 顧客が支払い情報を入力します。 ![認証を開始する](https://b.stripecdn.com/docs-statics-srv/assets/auth-flow-step02-processing.3877946d74743878ec86cec56dd69085.png) 顧客の銀行が認証が必要かどうかを確認している間に、SDK が読み込み画面を表示します。 ![チャレンジフロー画面](https://b.stripecdn.com/docs-statics-srv/assets/auth-flow-step03-otp.f42397e1ce4ec5975e05f1bada72d195.png) 銀行から要求された場合、SDK で顧客を認証します。 ## 3DS フローを制御する ヨーロッパの[強力な顧客認証 (SCA)](https://docs.stripe.com/strong-customer-authentication.md)などの規制や、日本のクレジットカード・セキュリティガイドラインなどの業界ガイドラインによって義務付けられている場合、またはイシュアから[再試行可能な支払い拒否](https://docs.stripe.com/declines/codes.md)コードを適用するように要求された場合や Stripe によって特定の最適化が適用される場合に、Stripe は自動的に 3DS をトリガーします。 [Radar](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) または [API](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#manual-three-ds) を使用して、3DS 認証をユーザーに求めるタイミングを決定することもできます。これにより、選択したパラメーターに基づいて各ユーザーの認証プロセスをカスタマイズできます。ただし、ウォレットや*オフセッション支払い* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information)など、すべての取引が 3DS をサポートしているわけではありません。 決済が 3DS をトリガーすると、そのカードで 3DS 認証がサポートされている限り、カード発行会社は決済を完了するために顧客を認証することを要求する場合があります。Stripe が認証リクエストを開始する間、要件はカード発行会社から届きます。使用しているフロントエンドによっては、[3DS フローを表示](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#when-to-use-3d-secure)する必要がある場合があります。 3DS を起動する一般的な Payment Intent API フローは、次のようになります。 1. PaymentIntent、SetupIntent を確定するか、Customer に PaymentMethod を関連付ける支払い情報を、ユーザーが入力します。 1. 規制に関する同意書、Radar ルール、手動 API リクエスト、カード発行会社による再試行可能な支払い拒否などの基準に基づいて、取引が 3DS をサポートし、必須であるかどうかを、Stripe が評価します。 1. 3DS の状況に応じて次のようになります。 - **必須でない場合**: *免除* (Some transactions that are deemed low risk, based on the volume of fraud rates associated with the payment provider or bank, may be exempt from Europe's Strong Customer Authentication requirements)などの理由により、Stripe が支払いを試行します。PaymentIntent のステータスは `processing` に移行します。カード発行会社から[再試行可能な支払い拒否](https://docs.stripe.com/declines/codes.md)によってリクエストされた場合は、必要に応じて自動的に再試行して続行します。 - **サポート対象外の場合**: PaymentIntent のステータスが `requires_payment_method` に移行します。3DS が起動した理由によっては、支払いのオーソリステップを続行できる可能性があります。その場合、PaymentIntent のステータスは `processing` に移行します。 - **必須**: Stripe が、カード発行会社の 3DS アクセス制御サーバー (ACS) に接続して、3DS フローを開始することで、3DS 認証フローを開始します。 1. カード発行会社から 3DS フローの情報を受け取ると、Stripe はカード発行会社にリクエストを送信してカード保有者を認証します。PaymentIntent のステータスが `requires_action` に移行します。 - [必要な 3DS アクションの表示](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#when-to-use-3d-secure)方法については、以下をご覧ください。カード発行会社はさまざまな 3DS フローのアクションタイプをリクエストする可能性があるため、常に 3DS チャレンジが視覚的に表示されるとは限りません (負担のないフローなど)。 - カード発行会社が 3DS にまったく対応していないか、障害が発生している場合、Stripe は認証なしで支払いの完了を試みることがあります (許容される場合)。 - 通常、3DS 認証リクエストのデータは取引の時点で顧客によって提供されます。負担と認証失敗の可能性を軽減するため、Stripe は、決済フロー中に顧客から収集したデータ、顧客の過去の取引に関する記録、または顧客のカードまたはカード発行会社から入手できえる関連情報など、他のソースから推測されるデータを使用して、これらのリクエストを完了することがあります。 - Stripeがすでに必要なすべての 3DS データ要素にアクセスできる場合、最適化された Stripe の 3DS サーバーが PaymentIntent を確定する際に、認証リクエストの完了を試行することがあります。これにより、3DS フローが成功した場合は PaymentIntent のステータスが `processing` に直接移行し、3DS フローを完了するために追加のステップまたはデータ要素が必要な場合は、`requires_action` のステータスに直接移行します。 1. 3DS 認証の結果に応じて、次のようになります。 - **認証済み**: Stripe は支払いを試み、PaymentIntent のステータスは `processing` に移行します。 - **失敗**: PaymentIntent のステータスが `requires_payment_method` に移行し、別の支払い方法を試みる必要があることを示します。再確定して 3DS を再試行することもできます。 - **その他のシナリオ**: 支払いで 3DS が起動された理由によっては、[エッジケース](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-three_d_secure-result)として支払いに対するオーソリの続行が許容される可能性があります。たとえば、結果が `attempt_acknowledged` になると支払いに進み、PaymentIntent のステータスが `processing` に移行します。 - 例外は、[継続支払いのためのインドの電子同意書](https://docs.stripe.com/india-recurring-payments.md)を作成する場合です。 `authenticated` 以外の結果はすべて失敗として扱われます。 1. 支払いの結果に応じて、PaymentIntent のステータスは `succeeded`、`requires_capture`、`requires_payment_method` のいずれかに移行します。 カード支払いに対して 3DS がサポートされ、試行されたかどうかを追跡するには、Charge の `payment_method_details` でカード情報の [three_d_secure](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-three_d_secure) プロパティーを読み取ります。`three_d_secure` プロパティーは、顧客がカードの認証を試行するときに Stripe によって設定されます。`three_d_secure.result` は、認証の結果を示します。 ### ダッシュボードで Radar ルールを使用する Stripe は、[PaymentIntent](https://docs.stripe.com/api/payment_intents.md) または [SetupIntent](https://docs.stripe.com/api/setup_intents.md) の作成時や確定時に 3DS を動的にリクエストする[不正利用防止対策](https://docs.stripe.com/radar/rules.md#request-3d-secure)機能を提供しています。これらのルールは[ダッシュボード](https://dashboard.stripe.com/settings/radar/rules)で設定できます。 [Radar for Teams](https://stripe.com/radar/fraud-teams) を使用している場合は、[カスタム 3DS ルール](https://docs.stripe.com/radar/rules.md#request-3d-secure)を追加できます。 ### API を使用して 3DS を手動でリクエストする 3DS をトリガーするデフォルトの方法は、リスクレベルやその他の要件に基づいて [Radar を使用して 3D セキュア](https://docs.stripe.com/radar/risk-settings.md#adaptive-3ds)を動的にリクエストすることです。手動による 3DS のトリガーは、Stripe を独自の不正利用防止エンジンに統合するアドバンスユーザー向けの方法です。 3DS を手動でトリガーするには、[PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-card-request_three_d_secure)または [SetupIntent](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_options-card-request_three_d_secure)を作成または確認するとき、または [Checkout セッション](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_three_d_secure)を作成するときに、最適化する対象に応じて ‘payment_method_options[カード][request_three_d_secure]’ を設定します。このプロセスは、1 回限りの支払いの場合や、将来の支払いのための支払い方法を設定する場合と同じです。このパラメーターを指定すると、Stripe は 3DS の実行を試行し、PaymentIntent、SetupIntent、または Checkout セッションの [動的な 3D セキュア Radar ルール](https://docs.stripe.com/radar/rules.md)を上書きします。 #### Payment Intents API ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d amount=1000 \ -d currency=usd \ -d "payment_method_options[card][request_three_d_secure]=any" ``` #### Setup Intents API ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_options[card][request_three_d_secure]=any" ``` #### Checkout Session API ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ --data-urlencode "success_url=https://example.com/success" \ -d "line_items[0][price]={{PRICE_ID}}" \ -d "line_items[0][quantity]=1" \ -d "payment_method_options[card][request_three_d_secure]=any" ``` このパラメーターを提供するタイミングは、お客様の不正利用防止エンジンがいつリスクを検知するかによって異なります。たとえば、不正利用防止エンジンがカードの詳細のみを調べる場合は、PaymentIntent または SetupIntent を作成する前に 3DS をリクエストすべきかどうかがわかります。不正利用防止エンジンがカードの詳細と取引の詳細の両方を調べる場合、確認中に詳細情報を取得した時点でパラメーターを指定します。その後で、結果として得られた PaymentIntent または SetupIntent をクライアントに渡して、プロセスを完了します。 API リファレンスで以下の各ケースの `request_three_d_secure` パラメーターの使用方法を確認してください。 - [PaymentIntent (支払いインテント) の作成](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-card-request_three_d_secure) - [PaymentIntent (支払いインテント) の確認](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-payment_method_options-card-request_three_d_secure) - [SetupIntent (支払い方法設定インテント) の作成](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_options-card-request_three_d_secure) - [SetupIntent (支払い方法設定インテント) の確認](https://docs.stripe.com/api/setup_intents/confirm.md#confirm_setup_intent-payment_method_options-card-request_three_d_secure) - [Checkout セッションを作成する](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-payment_method_options-card-request_three_d_secure) `request_three_d_secure` を `any` に設定して、`frictionless` フローを優先して手動で 3DS をリクエストします。この場合、顧客が追加入力をせずに認証が完了する可能性が高まります。 `request_three_d_secure` を `challenge` に設定し、`challenge` フローを優先して 3DS をリクエストします。この場合、顧客はアクティブ認証のプロンプトに応答する必要があります。 ただし、カード発行会社が最終的な認証フローを決定するため、Stripe はご希望の優先順位を保証することはできません。最終的な認証フローを確認するには、[Charge (支払い)](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details-card-three_d_secure-authentication_flow) または [SetupAttempt](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card-three_d_secure-authentication_flow) の `three_d_secure` プロパティの `authentication_flow` を調査してください。3DS フローについて、詳細は Stripe の [ガイド](https://stripe.com/guides/3d-secure-2#frictionless-authentication)をご覧ください。 > Stripe は、3D セキュア認証がカードで利用可能な場合にのみ、顧客に認証の実行を促します。そのカードが利用できない場合や、認証プロセス中にエラーが発生した場合、支払いは通常どおりに処理されます。 Stripe の必須認証ルールは、3DS を手動でリクエストするかどうかに関係なく、自動的に実行されます。お客様からの 3DS リクエストは、SCA に必要なリクエストに追加されます。 ## 3DS フローを表示する #### ウェブ `confirmCardPayment` と `handleCardAction` を呼び出す際に、Stripe はポップアップモーダルで認証 UI を自動的に表示します。銀行のウェブサイトにリダイレクトすることも、iframe を使用することもできます。 Stripe.js は、3DS2 認証中に[基本デバイス情報](https://support.stripe.com/questions/3d-secure-2-device-information)を収集し、リスク分析のためにカード発行会社に送信します。 ### 銀行のウェブサイトにリダイレクトする 顧客を 3DS 認証ページにリダイレクトするには、[サーバー上](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url)または[クライアント](https://docs.stripe.com/js/payment_intents/confirm_card_payment)側での確定時に PaymentIntent に `return_url` を 渡します。 確定後、PaymentIntent のステータスが *requires\_action* (This status appears as "requires_source_action" in API versions before 2019-02-11) の場合、PaymentIntent の `next_action` を調べます。これに `redirect_to_url` が含まれる場合、3DS が必要であることを意味します。 ```js next_action: { type: 'redirect_to_url', redirect_to_url: { url: 'https://hooks.stripe.com/...', return_url: 'https://mysite.com' } } ``` ブラウザーで、顧客を redirect_to_url hash の `url` にリダイレクトして認証を完了します。 ```javascript var action = intent.next_action; if (action && action.type === 'redirect_to_url') { window.location = action.redirect_to_url.url; } ``` 認証プロセスを完了した顧客は、お客様が PaymentIntent の作成時または確認時に指定した `return_url` にリダイレクトされます。 またリダイレクトによって、`payment_intent` および `payment_intent_client_secret` の URL クエリパラメーターも追加されます。アプリケーションはこれを使用して購入に関連付けられた PaymentIntent を識別できます。 ### iframe で表示する ウェブ上の認証 UI をウェブサイトのデザインに合わせてカスタマイズすることはできません。カードを発行した銀行がフォントと色を管理します。 ただし、3DS UI が表示される「方法」と「場所」は選択できます。大多数のビジネスは、これを決済ページの上に表示されるモーダルダイアログに表示しています。自社で構築済みのモーダルコンポーネントがある場合は、3DS フレームをその中に配置できます。認証のコンテンツを決済フォームとともにインラインで表示することもできます。 #### PaymentIntent を確定する 顧客が購入を完了する準備ができたら、お客様は PaymentIntent を*確定* (Confirming a PaymentIntent indicates that the customer intends to pay with the current or provided payment method. Upon confirmation, the PaymentIntent attempts to initiate a payment)して支払いの回収プロセスを開始します。 3DS の表示方法を制御するには、`return_url` を指定します。これは認証の完了後に 3DS の `