# 請求せずに直接保存 提示されたカードの詳細を収集して、オンライン利用のために保存します。 [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) を使用して、カードに請求することなくカードまたはモバイルウォレットの詳細を収集できます。SetupIntent で `card_present` の *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) を直接保存することはできませんが、ほとんどの場合、同じカードを表す再利用可能な `generated_card` の PaymentMethod を作成できます。顧客の視点からは、これらは同じ決済手段に捉えられます。 > `generated_card` PaymentMethod を使用して行われた支払いはすべて、カード非提示 (CNP) 取引であり、カード提示取引で利用できる機能 (*ライアビリティシフト* (With some 3D Secure transactions, the liability for fraudulent chargebacks (stolen or counterfeit cards) shifts from you to the card issuer)や [料金体系](https://stripe.com/terminal#pricing)など) はこれらの支払いには適用されません。 [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) を使用して、Visa、Mastercard、American Express、Discover、およびブランド提携している Interac、eftpos、girocard のカード詳細を収集することができます。ただし、ブランド提携している Interac カードはリーダーに挿入する必要があります。つまり、[Tap to Pay](https://docs.stripe.com/terminal/payments/setup-reader/tap-to-pay.md) ではサポートされていません。 [SetupIntents](https://docs.stripe.com/payments/setup-intents.md) は単一ブランドの Interac、eftpos、girocard をサポートしていません。 SetupIntents を使用してStripe Terminal でカードを保存するには、次のようにする必要があります。 1. *Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) オブジェクトを作成または取得します。 1. プロセスを追跡する [SetupIntent (支払い方法設定インテント)](https://docs.stripe.com/api/setup_intents.md) オブジェクトを作成します。 1. 顧客の同意を得たら、決済手段を収集し、Stripe に詳細を送信します。 > この機能の顧客の同意モデルを変更し、レガシーの `customer_consent_collected` パラメーターの代わりに `allow_redisplay` パラメーターを必須にしました。実装で `customer_consent_collected` を使用している場合は、`allow_redisplay` を使用するように実装を更新する必要があります。この更新は、2025 年 3 月 31 日に React Native 以外のユーザーには必須になり、React Native ユーザーには 2025 年 9 月 30 日に必須になりました。ガイダンスについては、[変更ログエントリー](https://docs.stripe.com/changelog/acacia/2024-09-30/terminal-remove-customer-consent-require-allow-redisplay.md)をご覧ください。 # サーバー主導型 > This is a サーバー主導型 for when terminal-sdk-platform is server-driven. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=server-driven. > サーバー主導型の SetupIntents API は、BBPOS WisePOS E および Stripe Reader S700/S710 と互換性があります。 ## 顧客を作成または取得する Stripe で保存したカードに請求するには、カードを [Customer](https://docs.stripe.com/api/customers.md) に関連付ける必要があります。 確定前に、[SetupIntent](https://docs.stripe.com/api/setup_intents.md) に顧客を含めると、入力した [Customer](https://docs.stripe.com/api/customers.md) オブジェクトに、生成されたカードの決済手段が自動的に関連付けられます。 以下のコードをサーバーに含めて、新しい `Customer` を作成します。 ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent を作成する > SetupIntent を作成する際に[顧客 ID](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) を指定すると、セットアップに成功したときに `Customer` にカード決済手段がアタッチされます。顧客 ID を提供しない場合は、別の呼び出しで決済手段をアタッチする必要があります。 [SetupIntent](https://docs.stripe.com/api/setup_intents.md) は、将来の支払いに備えて顧客の決済手段を設定する意図を示すオブジェクトです。SetupIntent は、この設定プロセスの各ステップを追跡します。Terminal の場合、このプロセスにはカード保有者の同意の収集と記録が含まれます。 - [SetupIntent を作成する](https://docs.stripe.com/api/setup_intents/create.md) サーバーで SetupIntent を作成し、`payment_method_types` パラメーターに `card_present` を含める必要があります。顧客が決済フローにいる場合にのみ決済手段を再利用する場合は、`usage=on_session` を指定します。 #### cURL ```bash # Request curl https://api.stripe.com/v1/setup_intents \ -u "sk_test_26PHem9AhJZvU623DfE1x4sd:" \ -d "payment_method_types[]"=card_present \ -d "customer"={{CUSTOMER_ID}} # Response { "id": "seti_1234567890abcdefghijklmn", "object": "setup_intent", ... # other SetupIntent fields } ``` ## 保存するために決済手段を収集する - [process_setup_intent](https://docs.stripe.com/api/terminal/readers/process_setup_intent.md) SetupIntent を作成したら、決済手段を収集し、顧客の同意を得ます。[allow_redisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) を `always` または `limited` にして、顧客の決済フローで決済手段が表示される頻度を指定します。 > 顧客からの同意を、文書またはアプリケーションのチェックボックスを使用して収集します。ご登録の地域で適用されるすべての法律、規則、および規制に準拠する必要があります。 SetupIntent の収集と確認の両方を処理する [process_setup_intent](https://docs.stripe.com/api/terminal/readers/process_setup_intent.md) エンドポイントを呼び出す必要があります。顧客が同意した場合は、`allow_redisplay` を `always` または `limited` に設定します。 ```curl curl https://api.stripe.com/v1/terminal/readers/{{READER_ID}}/process_setup_intent \ -u "<>:" \ -d setup_intent={{SETUP_INTENT_ID}} \ -d allow_redisplay=always ``` この方法では、接続されたカードリーダーを使用して支払い方法の暗号化データを収集し、その暗号化データを SetupIntent に関連付けます。 > 支払い方法の収集はローカルで行われ、次のステップまで SetupIntent オブジェクトのオーソリや更新は必要ありません。 ### 収集をキャンセルする #### プログラムによるキャンセル - [cancel_action](https://docs.stripe.com/api/terminal/readers/cancel_action.md) [cancel_action](https://docs.stripe.com/api/terminal/readers/cancel_action.md) を呼び出すことで、決済手段の収集をキャンセルできます。 ## Stripe に決済手段の詳細を送信する 前回の [process_setup_intent](https://docs.stripe.com/api/terminal/readers/process_setup_intent.md) の呼び出しは、*確定* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) を処理するため、それ以上のアクションは必要ありません。 設定が成功すると、SetupIntent の [status](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) プロパティの `succeeded` 値が [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card) とともに返されます。これは、オンライン決済に利用できる再利用可能な `card` の決済手段です。 > [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) は、物理的に存在するカードのトークン化を表す `card_present` PaymentMethod であり、オンラインでは請求できません。今後の支払いでは、代わりに生成されたカードが使用されます。顧客側から見ると、同じ決済手段です。 `generated_card` の決済手段が、[SetupIntent の作成](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent)時に指定した顧客に自動的に関連付けられます。SetupIntent の `latest_attempt` プロパティを展開することで、`generated_card` の決済手段を取得できます。必ず `generated_card` の値を確認してください。生成されたカードを使用できない決済手段では、この値が空になるためです。 ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` 別の方法として、顧客に関連付けられている支払い方法のリストを取得することで、関連付けられた支払い方法を入手することもできます。 ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -d type=card ``` SetupIntent の作成時に顧客を指定しなかった場合は、別個のコールで `generated_card` を Customer オブジェクトに関連付けることができます。 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` 設定に失敗したら、返されたエラーを調べて原因を特定します。たとえば、顧客から同意を収集できなかったり、Stripe に顧客の同意を通知できなったりした場合、エラーが発生します。 ## モバイルウォレットに関する考慮事項 保存されたモバイルウォレットは、将来のサブスクリプションや、顧客の代理として開始するその他の支払いなど、[off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) の支払いにのみ使用できます。デジタルウォレットによる決済手段を保存する際、`generated_card` には使用上の特定の考慮事項を示す `allow_redisplay=limited` が設定されます。 モバイルウォレットに支払いを試行する場合は、PaymentIntent の確認時に必ず `off_session=true` を渡してください。顧客が決済フローに存在する場合、[Apple Pay](https://docs.stripe.com/apple-pay.md) と [Google Pay](https://docs.stripe.com/google-pay.md) の組み込みを使用して決済手段の提示を再度求める必要があります。 ## 法令遵守 顧客の支払い詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。たとえば、欧州データ保護委員会は、支払い詳細の保存に関するガイダンスを発行しています。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がウェブサイトやアプリを使用していないときに請求する、MOTOを注文する、店舗で請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。 決済手段の詳細を保存する趣旨、顧客がオプトインできるようにする規約を、決済フローに追加します。顧客がオフラインのときに顧客に請求する予定の場合は、少なくとも以下に関する説明を規約に含めてください。 - 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意 - 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いまたはサブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。 - 決済金額の決定方法。 - サブスクリプションサービスに使用される支払い方法を設定する場合は、キャンセルに関するポリシー。 これらの規約に関する顧客の書面による同意の記録を必ず保管してください。 決済手段を保存した場合、その使用は、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに請求し、さらに顧客の決済手段を保存して、以降の購入に備えた保存済みの決済手段として顧客に提示する場合は、顧客から明示的に同意を収集する必要があります。そのための方法の 1 つとして、「今後の使用に備えて決済手段を保存する」チェックボックスの使用があります。 # JavaScript > This is a JavaScript for when terminal-sdk-platform is js. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=js. ## 顧客を作成または取得する Stripe で保存したカードに請求するには、カードを [Customer](https://docs.stripe.com/api/customers.md) に関連付ける必要があります。 確定前に、[SetupIntent](https://docs.stripe.com/api/setup_intents.md) に顧客を含めると、入力した [Customer](https://docs.stripe.com/api/customers.md) オブジェクトに、生成されたカードの決済手段が自動的に関連付けられます。 以下のコードをサーバーに含めて、新しい `Customer` を作成します。 ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent を作成する > SetupIntent を作成する際に[顧客 ID](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) を指定すると、セットアップに成功したときに `Customer` にカード決済手段がアタッチされます。顧客 ID を提供しない場合は、別の呼び出しで決済手段をアタッチする必要があります。 [SetupIntent](https://docs.stripe.com/api/setup_intents.md) は、将来の支払いに備えて顧客の決済手段を設定する意図を示すオブジェクトです。SetupIntent は、この設定プロセスの各ステップを追跡します。Terminal の場合、このプロセスにはカード保有者の同意の収集と記録が含まれます。 - [SetupIntent を作成する](https://docs.stripe.com/api/setup_intents/create.md) サーバーで SetupIntent を作成し、`payment_method_types` パラメーターに `card_present` を含める必要があります。顧客が決済フローにいる場合にのみ決済手段を再利用する場合は、`usage=on_session` を指定します。 SetupIntent には、個々の SetupIntent に固有のキーである [client secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) が含まれています。サーバーで SetupIntent から *client secret* (The client secret is a unique key returned from Stripe as part of a PaymentIntent. This key lets the client access important fields from the PaymentIntent (status, amount, currency) while hiding sensitive ones (metadata, customer)) を取得し、クライアント側に渡す必要があります。 #### cURL ```bash # Request curl https://api.stripe.com/v1/setup_intents \ -u "sk_test_26PHem9AhJZvU623DfE1x4sd:" \ -d "payment_method_types[]"=card_present \ -d "customer"={{CUSTOMER_ID}} # Response { "id": "seti_1234567890abcdefghijklmn", "object": "setup_intent", "client_secret": "seti_1234567890abcdefghijklmn_secret_5678901234opqrstuvwxyz", ... # other SetupIntent fields } # Your server endpoint response { "id": "seti_1234567890abcdefghijklmn", "client_secret": "seti_1234567890abcdefghijklmn_secret_5678901234opqrstuvwxyz" } ``` ## 保存するために決済手段を収集する - [collectSetupIntentPaymentMethod (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#collect-setup-intent-payment-method) SetupIntent を作成したら、SDK を使用して決済手段を収集し、顧客の同意を得ます。[allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) を `always` または `limited` にして、顧客の決済フローで決済手段が表示される頻度を指定します。 > 顧客からの同意を、文書またはアプリケーションのチェックボックスを使用して収集します。ご登録の地域で適用されるすべての法律、規則、および規制に準拠する必要があります。 決済手段を収集 するには、リーダーに接続されていることを確認してください。アプリが `collectSetupIntentPaymentMethod` を呼び出した後、接続されたリーダーはカードを待機します。 ```javascript async () => { // clientSecret is the client_secret from the SetupIntent you created in Step 1. const result = await terminal.collectSetupIntentPaymentMethod(clientSecret, "always"); if (result.error) { // Placeholder for handling result.error } else { // Placeholder for confirming result.setupIntent } } ``` この方法では、接続されたカードリーダーを使用して支払い方法の暗号化データを収集し、その暗号化データを SetupIntent に関連付けます。 > 支払い方法の収集はローカルで行われ、次のステップまで SetupIntent オブジェクトのオーソリや更新は必要ありません。 ### 収集をキャンセルする #### プログラムによるキャンセル SDK で [cancelCollectSetupIntentPaymentMethod](https://docs.stripe.com/terminal/references/api/js-sdk.md#cancel-collect-setup-intent-payment-method) を呼び出すことで、決済手段の収集をキャンセルできます。 #### 顧客によるキャンセル 取引の [enable_customer_cancellation](https://docs.stripe.com/terminal/references/api/js-sdk.md#collect-setup-intent-payment-method) を true に設定すると、スマートリーダーの画面にキャンセルボタンが表示されます。キャンセルボタンをタップすると、現在の取引がキャンセルされます。 ```javascript terminal.collectSetupIntentPaymentMethod( setupIntent, allowRedisplay,{ enable_customer_cancellation: true } ) ``` ## Stripe に決済手段の詳細を送信する - [confirmSetupIntent (JavaScript)](https://docs.stripe.com/terminal/references/api/js-sdk.md#confirm-setup-intent) `confirmSetupIntent` を使用して、設定を完了させます。 設定が成功すると、SetupIntent の [status](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) プロパティの `succeeded` 値が [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card) とともに返されます。これは、オンライン決済に利用できる再利用可能な `card` の決済手段です。 > [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) は、物理的に存在するカードのトークン化を表す `card_present` PaymentMethod であり、オンラインでは請求できません。今後の支払いでは、代わりに生成されたカードが使用されます。顧客側から見ると、同じ決済手段です。 `generated_card` の決済手段が、[SetupIntent の作成](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent)時に指定した顧客に自動的に関連付けられます。SetupIntent の `latest_attempt` プロパティを展開することで、`generated_card` の決済手段を取得できます。必ず `generated_card` の値を確認してください。生成されたカードを使用できない決済手段では、この値が空になるためです。 ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` 別の方法として、顧客に関連付けられている支払い方法のリストを取得することで、関連付けられた支払い方法を入手することもできます。 ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -d type=card ``` SetupIntent の作成時に顧客を指定しなかった場合は、別個のコールで `generated_card` を Customer オブジェクトに関連付けることができます。 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` 設定に失敗したら、返されたエラーを調べて原因を特定します。たとえば、顧客から同意を収集できなかったり、Stripe に顧客の同意を通知できなったりした場合、エラーが発生します。 ## モバイルウォレットに関する考慮事項 保存されたモバイルウォレットは、将来のサブスクリプションや、顧客の代理として開始するその他の支払いなど、[off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) の支払いにのみ使用できます。デジタルウォレットによる決済手段を保存する際、`generated_card` には使用上の特定の考慮事項を示す `allow_redisplay=limited` が設定されます。 モバイルウォレットに支払いを試行する場合は、PaymentIntent の確認時に必ず `off_session=true` を渡してください。顧客が決済フローに存在する場合、[Apple Pay](https://docs.stripe.com/apple-pay.md) と [Google Pay](https://docs.stripe.com/google-pay.md) の組み込みを使用して決済手段の提示を再度求める必要があります。 ## 法令遵守 顧客の支払い詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。たとえば、欧州データ保護委員会は、支払い詳細の保存に関するガイダンスを発行しています。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がウェブサイトやアプリを使用していないときに請求する、MOTOを注文する、店舗で請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。 決済手段の詳細を保存する趣旨、顧客がオプトインできるようにする規約を、決済フローに追加します。顧客がオフラインのときに顧客に請求する予定の場合は、少なくとも以下に関する説明を規約に含めてください。 - 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意 - 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いまたはサブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。 - 決済金額の決定方法。 - サブスクリプションサービスに使用される支払い方法を設定する場合は、キャンセルに関するポリシー。 これらの規約に関する顧客の書面による同意の記録を必ず保管してください。 決済手段を保存した場合、その使用は、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに請求し、さらに顧客の決済手段を保存して、以降の購入に備えた保存済みの決済手段として顧客に提示する場合は、顧客から明示的に同意を収集する必要があります。そのための方法の 1 つとして、「今後の使用に備えて決済手段を保存する」チェックボックスの使用があります。 # iOS > This is a iOS for when terminal-sdk-platform is ios. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=ios. > SDK のバージョン `5.0.0` では、収集する統合ステップと確定する統合ステップが 1 つの `processSetupIntent` ステップに統合されました。 ## 顧客を作成または取得する Stripe で保存したカードに請求するには、カードを [Customer](https://docs.stripe.com/api/customers.md) に関連付ける必要があります。 確定前に、[SetupIntent](https://docs.stripe.com/api/setup_intents.md) に顧客を含めると、入力した [Customer](https://docs.stripe.com/api/customers.md) オブジェクトに、生成されたカードの決済手段が自動的に関連付けられます。 以下のコードをサーバーに含めて、新しい `Customer` を作成します。 ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent を作成する > SetupIntent を作成する際に[顧客 ID](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) を指定すると、セットアップに成功したときに `Customer` にカード決済手段がアタッチされます。顧客 ID を提供しない場合は、別の呼び出しで決済手段をアタッチする必要があります。 [SetupIntent](https://docs.stripe.com/api/setup_intents.md) は、将来の支払いに備えて顧客の決済手段を設定する意図を示すオブジェクトです。SetupIntent は、この設定プロセスの各ステップを追跡します。Terminal の場合、このプロセスにはカード保有者の同意の収集と記録が含まれます。 - [SetupIntentParameters (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPSetupIntentParameters.html) SetupIntent を作成して、`customer`、`onBehalfOf` (*Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) の場合のみ)、`usage` の各パラメーターを指定できます。 #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController { // Action for a "Save Card" button func saveCardAction() throws { let params = try SetupIntentParametersBuilder().setCustomer(""{{CUSTOMER_ID}}"") Terminal.shared.createSetupIntent(params) { createResult, createError in if let error = createError { print("createSetupIntent failed: \(error)") } else if let setupIntent = createResult { print("createSetupIntent succeeded") // ... } } } // ... } ``` 決済の開始に必要な情報をアプリですぐに利用できない場合は、サーバーで [SetupIntent を作成](https://docs.stripe.com/api/setup_intents/create.md)できます。クライアントシークレットを使用して `retrieveSetupIntent` を呼び出し、取得した SetupIntent を使用して `processSetupIntent` を呼び出します。 ## 保存するために決済手段を収集する - [retrieveSetupIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)retrieveSetupIntent:delegate:completion:) - [processSetupIntent (iOS)](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPTerminal.html#/c:objc\(cs\)SCPTerminal\(im\)processSetupIntent:collectConfig:completion:) SetupIntent を作成したら、SDK を使用して決済手段を収集し、顧客の同意を得ます。[allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) を `always` または `limited` にして、顧客の決済フローで決済手段が表示される頻度を指定します。 > 顧客からの同意を、文書またはアプリケーションのチェックボックスを使用して収集します。ご登録の地域で適用されるすべての法律、規則、および規制に準拠する必要があります。 SetupIntent を処理 するには、リーダーに接続されていることを確認してください。アプリが `processSetupIntent` を呼び出した後、接続されたリーダーはカードを待機します。 #### Swift ```swift import UIKit import StripeTerminal class PaymentViewController: UIViewController, ReaderDisplayDelegate { // Label for displaying messages from the card reader let readerMessageLabel = UILabel(frame: .zero) var collectCancelable: Cancelable? = nil // ... // Action for a "Subscribe" button func subscribeAction() throws { let params = try SetupIntentParametersBuilder().setCustomer(""{{CUSTOMER_ID}}"").build() Terminal.shared.createSetupIntent(params) { createResult, createError in if let error = createError { print("createSetupIntent failed: \(error)") } else if let setupIntent = createResult { print("createSetupIntent succeeded") let config = try CollectSetupIntentConfigurationBuilder() .setAllowRedisplay(.always) .build() self.collectCancelable = Terminal.shared.processSetupIntent(setupIntent, collectConfig: config) { processedSetupIntent, processError in if let error = processError { print("processSetupIntent failed: \(error)") } else if let processedSetupIntent = processedSetupIntent { print("processSetupIntent succeeded") } } } } } } ``` この方法では、接続されたカードリーダーを使用して支払い方法の暗号化データを収集し、その暗号化データを SetupIntent に関連付けます。 > 支払い方法の収集はローカルで行われ、次のステップまで SetupIntent オブジェクトのオーソリや更新は必要ありません。 ### 収集をキャンセルする #### プログラムによるキャンセル SDK から返される [Cancelable](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCancelable.html) オブジェクトを使用して、決済手段の収集をキャンセルできます。 #### 顧客によるキャンセル CustomerCancellation はデフォルトで有効になっているため、スマートリーダーユーザーにはキャンセルボタンが表示されます。キャンセルボタンをタップすると、アクティブな取引がキャンセルされます。取引でこの動作を切り替えるには、[setCustomerCancellation](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCollectSetupIntentConfigurationBuilder.html#/c:objc(cs) を使用します。 #### Swift ```swift let setupConfig = try CollectSetupIntentConfiguration() .build() Terminal.shared.collectSetupIntentPaymentMethod(intent, allowRedisplay: AllowRedisplay.always, setupConfig: setupConfig) { collectedSetupIntent, collectError in } ``` ## Stripe に決済手段の詳細を送信する 前回の `processSetupIntent` の呼び出しは、*確定* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) を処理するため、それ以上のアクションは必要ありません。 設定が成功すると、SetupIntent の [status](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) プロパティの `succeeded` 値が [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card) とともに返されます。これは、オンライン決済に利用できる再利用可能な `card` の決済手段です。 > [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) は、物理的に存在するカードのトークン化を表す `card_present` PaymentMethod であり、オンラインでは請求できません。今後の支払いでは、代わりに生成されたカードが使用されます。顧客側から見ると、同じ決済手段です。 `generated_card` の決済手段が、[SetupIntent の作成](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent)時に指定した顧客に自動的に関連付けられます。SetupIntent の `latest_attempt` プロパティを展開することで、`generated_card` の決済手段を取得できます。必ず `generated_card` の値を確認してください。生成されたカードを使用できない決済手段では、この値が空になるためです。 ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` 別の方法として、顧客に関連付けられている支払い方法のリストを取得することで、関連付けられた支払い方法を入手することもできます。 ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -d type=card ``` SetupIntent の作成時に顧客を指定しなかった場合は、別個のコールで `generated_card` を Customer オブジェクトに関連付けることができます。 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` 設定に失敗したら、返されたエラーを調べて原因を特定します。たとえば、顧客から同意を収集できなかったり、Stripe に顧客の同意を通知できなったりした場合、エラーが発生します。 #### Swift ```swift // Action for a "Save Card" button func saveCardAction() throws { let params = try SetupIntentParametersBuilder.setCustomer(""{{CUSTOMER_ID}}"").build() Terminal.shared.createSetupIntent(params) { createResult, createError in if let error = createError { print("createSetupIntent failed: \(error)") } else if let setupIntent = createResult { print("createSetupIntent succeeded") let config = try CollectSetupIntentConfigurationBuilder() .setAllowRedisplay(.always) .build() self.collectCancelable = Terminal.shared.processSetupIntent(setupIntent, collectConfig: config) { processedSetupIntent, processError in if let error = processError { print("processSetupIntent failed: \(error)") } else if let processedSetupIntent = processedSetupIntent { print("processSetupIntent succeeded") } } } } } ``` ## モバイルウォレットに関する考慮事項 保存されたモバイルウォレットは、将来のサブスクリプションや、顧客の代理として開始するその他の支払いなど、[off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) の支払いにのみ使用できます。デジタルウォレットによる決済手段を保存する際、`generated_card` には使用上の特定の考慮事項を示す `allow_redisplay=limited` が設定されます。 モバイルウォレットに支払いを試行する場合は、PaymentIntent の確認時に必ず `off_session=true` を渡してください。顧客が決済フローに存在する場合、[Apple Pay](https://docs.stripe.com/apple-pay.md) と [Google Pay](https://docs.stripe.com/google-pay.md) の組み込みを使用して決済手段の提示を再度求める必要があります。 ## 法令遵守 顧客の支払い詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。たとえば、欧州データ保護委員会は、支払い詳細の保存に関するガイダンスを発行しています。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がウェブサイトやアプリを使用していないときに請求する、MOTOを注文する、店舗で請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。 決済手段の詳細を保存する趣旨、顧客がオプトインできるようにする規約を、決済フローに追加します。顧客がオフラインのときに顧客に請求する予定の場合は、少なくとも以下に関する説明を規約に含めてください。 - 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意 - 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いまたはサブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。 - 決済金額の決定方法。 - サブスクリプションサービスに使用される支払い方法を設定する場合は、キャンセルに関するポリシー。 これらの規約に関する顧客の書面による同意の記録を必ず保管してください。 決済手段を保存した場合、その使用は、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに請求し、さらに顧客の決済手段を保存して、以降の購入に備えた保存済みの決済手段として顧客に提示する場合は、顧客から明示的に同意を収集する必要があります。そのための方法の 1 つとして、「今後の使用に備えて決済手段を保存する」チェックボックスの使用があります。 # Android > This is a Android for when terminal-sdk-platform is android. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=android. > SDK のバージョン `5.0.0` では、収集する統合ステップと確定する統合ステップが 1 つの `processSetupIntent` ステップに統合されました。 ## 顧客を作成または取得する Stripe で保存したカードに請求するには、カードを [Customer](https://docs.stripe.com/api/customers.md) に関連付ける必要があります。 確定前に、[SetupIntent](https://docs.stripe.com/api/setup_intents.md) に顧客を含めると、入力した [Customer](https://docs.stripe.com/api/customers.md) オブジェクトに、生成されたカードの決済手段が自動的に関連付けられます。 以下のコードをサーバーに含めて、新しい `Customer` を作成します。 ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent を作成する > SetupIntent を作成する際に[顧客 ID](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) を指定すると、セットアップに成功したときに `Customer` にカード決済手段がアタッチされます。顧客 ID を提供しない場合は、別の呼び出しで決済手段をアタッチする必要があります。 [SetupIntent](https://docs.stripe.com/api/setup_intents.md) は、将来の支払いに備えて顧客の決済手段を設定する意図を示すオブジェクトです。SetupIntent は、この設定プロセスの各ステップを追跡します。Terminal の場合、このプロセスにはカード保有者の同意の収集と記録が含まれます。 - [SetupIntentParameters (Android)](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-setup-intent-parameters/index.html) SetupIntent を作成して、`customer`、`onBehalfOf` (*Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) の場合のみ)、`usage` の各パラメーターを指定できます。 #### Kotlin ```kotlin val params = SetupIntentParameters.Builder() .setCustomer(""{{CUSTOMER_ID}}"") .build() Terminal.getInstance().createSetupIntent( params, object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` 決済の開始に必要な情報をアプリですぐに利用できない場合は、サーバーで [SetupIntent を作成](https://docs.stripe.com/api/setup_intents/create.md)できます。クライアントシークレットを使用して `retrieveSetupIntent` を呼び出し、取得した SetupIntent を使用して `processSetupIntent` を呼び出します。 ## 保存するために決済手段を収集する - [retrieveSetupIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/retrieve-setup-intent.html) - [processSetupIntent (Android)](https://stripe.dev/stripe-terminal-android/core/com.stripe.stripeterminal/-terminal/process-setup-intent.html) SetupIntent を作成したら、SDK を使用して決済手段を収集し、顧客の同意を得ます。[allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) を `always` または `limited` にして、顧客の決済フローで決済手段が表示される頻度を指定します。 > 顧客からの同意を、文書またはアプリケーションのチェックボックスを使用して収集します。ご登録の地域で適用されるすべての法律、規則、および規制に準拠する必要があります。 SetupIntent を処理 するには、リーダーに接続されていることを確認してください。アプリが `processSetupIntent` を呼び出した後、接続されたリーダーはカードを待機します。 #### Kotlin ```kotlin val config = CollectSetupIntentConfiguration.Builder() .build() val cancelable = Terminal.getInstance().processSetupIntent( setupIntent, AllowRedisplay.ALWAYS, config, object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` この方法では、接続されたカードリーダーを使用して支払い方法の暗号化データを収集し、その暗号化データを SetupIntent に関連付けます。 > 支払い方法の収集はローカルで行われ、次のステップまで SetupIntent オブジェクトのオーソリや更新は必要ありません。 ### 収集をキャンセルする #### プログラムによるキャンセル SDK から返される [Cancelable](https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPCancelable.html) オブジェクトを使用して、決済手段の収集をキャンセルできます。 #### 顧客によるキャンセル CustomerCancellation はデフォルトで有効になっているため、スマートリーダーユーザーにはキャンセルボタンが表示されます。キャンセルボタンをタップすると、アクティブな取引がキャンセルされます。取引でこの動作を切り替えるには、[setCustomerCancellation](https://stripe.dev/stripe-terminal-android/external/com.stripe.stripeterminal.external.models/-collect-setup-intent-configuration/-builder/set-customer-cancellation.html) を使用します。 #### Kotlin ```kotlin Terminal.getInstance().collectSetupIntentPaymentMethod( setupIntent, AllowRedisplay.ALWAYS,SetupIntentConfiguration.Builder() .build(), object : SetupIntentCallback { override fun onSuccess(setupIntent: SetupIntent) { // Placeholder for handling successful operation } override fun onFailure(e: TerminalException) { // Placeholder for handling exception } } ) ``` ## Stripe に決済手段の詳細を送信する 前回の `processSetupIntent` の呼び出しは、*確定* (Confirming an intent indicates that the customer intends to use the current or provided payment method. Upon confirmation, the intent attempts to initiate the portions of the flow that have real-world side effects) を処理するため、それ以上のアクションは必要ありません。 設定が成功すると、SetupIntent の [status](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) プロパティの `succeeded` 値が [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card) とともに返されます。これは、オンライン決済に利用できる再利用可能な `card` の決済手段です。 > [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) は、物理的に存在するカードのトークン化を表す `card_present` PaymentMethod であり、オンラインでは請求できません。今後の支払いでは、代わりに生成されたカードが使用されます。顧客側から見ると、同じ決済手段です。 `generated_card` の決済手段が、[SetupIntent の作成](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent)時に指定した顧客に自動的に関連付けられます。SetupIntent の `latest_attempt` プロパティを展開することで、`generated_card` の決済手段を取得できます。必ず `generated_card` の値を確認してください。生成されたカードを使用できない決済手段では、この値が空になるためです。 ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` 別の方法として、顧客に関連付けられている支払い方法のリストを取得することで、関連付けられた支払い方法を入手することもできます。 ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -d type=card ``` SetupIntent の作成時に顧客を指定しなかった場合は、別個のコールで `generated_card` を Customer オブジェクトに関連付けることができます。 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` 設定に失敗したら、返されたエラーを調べて原因を特定します。たとえば、顧客から同意を収集できなかったり、Stripe に顧客の同意を通知できなったりした場合、エラーが発生します。 ## モバイルウォレットに関する考慮事項 保存されたモバイルウォレットは、将来のサブスクリプションや、顧客の代理として開始するその他の支払いなど、[off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) の支払いにのみ使用できます。デジタルウォレットによる決済手段を保存する際、`generated_card` には使用上の特定の考慮事項を示す `allow_redisplay=limited` が設定されます。 モバイルウォレットに支払いを試行する場合は、PaymentIntent の確認時に必ず `off_session=true` を渡してください。顧客が決済フローに存在する場合、[Apple Pay](https://docs.stripe.com/apple-pay.md) と [Google Pay](https://docs.stripe.com/google-pay.md) の組み込みを使用して決済手段の提示を再度求める必要があります。 ## 法令遵守 顧客の支払い詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。たとえば、欧州データ保護委員会は、支払い詳細の保存に関するガイダンスを発行しています。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がウェブサイトやアプリを使用していないときに請求する、MOTOを注文する、店舗で請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。 決済手段の詳細を保存する趣旨、顧客がオプトインできるようにする規約を、決済フローに追加します。顧客がオフラインのときに顧客に請求する予定の場合は、少なくとも以下に関する説明を規約に含めてください。 - 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意 - 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いまたはサブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。 - 決済金額の決定方法。 - サブスクリプションサービスに使用される支払い方法を設定する場合は、キャンセルに関するポリシー。 これらの規約に関する顧客の書面による同意の記録を必ず保管してください。 決済手段を保存した場合、その使用は、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに請求し、さらに顧客の決済手段を保存して、以降の購入に備えた保存済みの決済手段として顧客に提示する場合は、顧客から明示的に同意を収集する必要があります。そのための方法の 1 つとして、「今後の使用に備えて決済手段を保存する」チェックボックスの使用があります。 # React Native > This is a React Native for when terminal-sdk-platform is react-native. View the full page at https://docs.stripe.com/terminal/features/saving-payment-details/save-directly?terminal-sdk-platform=react-native. > React Native SDK のバージョン `0.0.1-beta.29` では、[processSetupIntent](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#processsetupintent) メソッドを使用して、回収して確定する導入ステップを 1 つの API コールにまとめることができます。 ## 顧客を作成または取得する Stripe で保存したカードに請求するには、カードを [Customer](https://docs.stripe.com/api/customers.md) に関連付ける必要があります。 確定前に、[SetupIntent](https://docs.stripe.com/api/setup_intents.md) に顧客を含めると、入力した [Customer](https://docs.stripe.com/api/customers.md) オブジェクトに、生成されたカードの決済手段が自動的に関連付けられます。 以下のコードをサーバーに含めて、新しい `Customer` を作成します。 ```curl curl -X POST https://api.stripe.com/v1/customers \ -u "<>:" ``` ## SetupIntent を作成する > SetupIntent を作成する際に[顧客 ID](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer) を指定すると、セットアップに成功したときに `Customer` にカード決済手段がアタッチされます。顧客 ID を提供しない場合は、別の呼び出しで決済手段をアタッチする必要があります。 [SetupIntent](https://docs.stripe.com/api/setup_intents.md) は、将来の支払いに備えて顧客の決済手段を設定する意図を示すオブジェクトです。SetupIntent は、この設定プロセスの各ステップを追跡します。Terminal の場合、このプロセスにはカード保有者の同意の収集と記録が含まれます。 - [CreateSetupIntentParams (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/index.html#CreateSetupIntentParams) SetupIntent を作成して、`customer`、`onBehalfOf` (*Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) の場合のみ)、`usage` の各パラメーターを指定できます。 ```js const { createSetupIntent } = useStripeTerminal(); const { paymentIntent, error } = await createSetupIntent({ customer: "{{CUSTOMER_ID}}", }); if (error) { // Placeholder for handling exception return; } // Placeholder for collecting a payment method with setupIntent ``` 決済の開始に必要な情報をアプリですぐに利用できない場合は、サーバーで [SetupIntent を作成](https://docs.stripe.com/api/setup_intents/create.md)できます。クライアントシークレットを使用して `retrieveSetupIntent` を呼び出し、取得した SetupIntent を使用して `collectSetupIntentPaymentMethod` を呼び出します。 ## 保存するために決済手段を収集する - [retrieveSetupIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#retrieveSetupIntent) - [collectSetupIntentPaymentMethod (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#collectSetupIntentPaymentMethod) SetupIntent を作成したら、SDK を使用して決済手段を収集し、顧客の同意を得ます。[allowRedisplay](https://docs.stripe.com/api/payment_methods/object.md#payment_method_object-allow_redisplay) を `always` または `limited` にして、顧客の決済フローで決済手段が表示される頻度を指定します。 > 顧客からの同意を、文書またはアプリケーションのチェックボックスを使用して収集します。ご登録の地域で適用されるすべての法律、規則、および規制に準拠する必要があります。 決済手段を収集 するには、リーダーに接続されていることを確認してください。アプリが `collectSetupIntentPaymentMethod` を呼び出した後、接続されたリーダーはカードを待機します。 ```js const { setupIntent, error} = await collectSetupIntentPaymentMethod({ setupIntent: setupIntent, allowRedisplay: "always" }); if (error) { // Placeholder for handling exception return; } // Placeholder for confirming setupIntent ``` この方法では、接続されたカードリーダーを使用して支払い方法の暗号化データを収集し、その暗号化データを SetupIntent に関連付けます。 > 支払い方法の収集はローカルで行われ、次のステップまで SetupIntent オブジェクトのオーソリや更新は必要ありません。 ### 収集をキャンセルする #### プログラムによるキャンセル SDK で [cancelCollectSetupIntent](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#cancelCollectSetupIntent) を呼び出すと、支払い方法の収集をキャンセルできます。 #### 顧客によるキャンセル スマートリーダーでは、デフォルトで顧客にキャンセルボタンが表示されます。これを無効にするには、[customerCancellation](https://stripe.dev/stripe-terminal-react-native/api-reference/types/CollectSetupIntentPaymentMethodParams.html) を `'disableIfAvailable'` に設定します。キャンセルボタンをタップすると、アクティブな取引がキャンセルされます。 ```js const { setupIntent, error } = await collectSetupIntentPaymentMethod({ setupIntentId: setupIntentId, allowRedisplay: "always",customerCancellation: 'enableIfAvailable' }); if (error) { // Placeholder for handling exception } // Placeholder for processing SetupIntent ``` ## Stripe に決済手段の詳細を送信する - [confirmSetupIntent (React Native)](https://stripe.dev/stripe-terminal-react-native/api-reference/interfaces/StripeTerminalSdkType.html#confirmSetupIntent) `confirmSetupIntent` を使用して、設定を完了させます。 設定が成功すると、SetupIntent の [status](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-status) プロパティの `succeeded` 値が [SetupAttempt.payment_method_details.card_present.generated_card](https://docs.stripe.com/api/setup_attempts/object.md#setup_attempt_object-payment_method_details-card_present-generated_card) とともに返されます。これは、オンライン決済に利用できる再利用可能な `card` の決済手段です。 > [SetupIntent.payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) は、物理的に存在するカードのトークン化を表す `card_present` PaymentMethod であり、オンラインでは請求できません。今後の支払いでは、代わりに生成されたカードが使用されます。顧客側から見ると、同じ決済手段です。 `generated_card` の決済手段が、[SetupIntent の作成](https://docs.stripe.com/terminal/features/saving-payment-details/save-directly.md#create-setupintent)時に指定した顧客に自動的に関連付けられます。SetupIntent の `latest_attempt` プロパティを展開することで、`generated_card` の決済手段を取得できます。必ず `generated_card` の値を確認してください。生成されたカードを使用できない決済手段では、この値が空になるためです。 ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUPINTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` 別の方法として、顧客に関連付けられている支払い方法のリストを取得することで、関連付けられた支払い方法を入手することもできます。 ```curl curl -G https://api.stripe.com/v1/customers/{{CUSTOMER_ID}}/payment_methods \ -u "<>:" \ -d type=card ``` SetupIntent の作成時に顧客を指定しなかった場合は、別個のコールで `generated_card` を Customer オブジェクトに関連付けることができます。 ```curl curl https://api.stripe.com/v1/payment_methods/{{PAYMENTMETHOD_ID}}/attach \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" ``` 設定に失敗したら、返されたエラーを調べて原因を特定します。たとえば、顧客から同意を収集できなかったり、Stripe に顧客の同意を通知できなったりした場合、エラーが発生します。 ```js const { setupIntent, error } = await confirmSetupIntent({ setupIntent: setupIntent }); if (error) { // Placeholder for handling exception return; } // The SetupIntent is now ready to be used as a payment method on a future payment ``` ## モバイルウォレットに関する考慮事項 保存されたモバイルウォレットは、将来のサブスクリプションや、顧客の代理として開始するその他の支払いなど、[off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) の支払いにのみ使用できます。デジタルウォレットによる決済手段を保存する際、`generated_card` には使用上の特定の考慮事項を示す `allow_redisplay=limited` が設定されます。 モバイルウォレットに支払いを試行する場合は、PaymentIntent の確認時に必ず `off_session=true` を渡してください。顧客が決済フローに存在する場合、[Apple Pay](https://docs.stripe.com/apple-pay.md) と [Google Pay](https://docs.stripe.com/google-pay.md) の組み込みを使用して決済手段の提示を再度求める必要があります。 ## 法令遵守 顧客の支払い詳細を保存する際、適用されるすべての法律、規制、ネットワークの規則に準拠する責任はお客様にあります。たとえば、欧州データ保護委員会は、支払い詳細の保存に関するガイダンスを発行しています。これらの要件は通常、以降の購入時の決済フローでの顧客の支払い方法を提示する、顧客がウェブサイトやアプリを使用していないときに請求する、MOTOを注文する、店舗で請求するなど、将来に備えて顧客の支払い方法を保存する場合に適用されます。 決済手段の詳細を保存する趣旨、顧客がオプトインできるようにする規約を、決済フローに追加します。顧客がオフラインのときに顧客に請求する予定の場合は、少なくとも以下に関する説明を規約に含めてください。 - 指定された取引で顧客の代理として単独の支払いまたは一連の支払いを開始することをお客様に許可するという、顧客からお客様への同意 - 予期される支払い時期と支払い頻度 (たとえば、請求が予定されている分割払いまたはサブスクリプションの決済なのか、あるいは予定されていないトップアップなのか)。 - 決済金額の決定方法。 - サブスクリプションサービスに使用される支払い方法を設定する場合は、キャンセルに関するポリシー。 これらの規約に関する顧客の書面による同意の記録を必ず保管してください。 決済手段を保存した場合、その使用は、規約に記載された特定の用途にのみ使用できます。顧客がオフラインであるときに請求し、さらに顧客の決済手段を保存して、以降の購入に備えた保存済みの決済手段として顧客に提示する場合は、顧客から明示的に同意を収集する必要があります。そのための方法の 1 つとして、「今後の使用に備えて決済手段を保存する」チェックボックスの使用があります。