# 既存の銀行口座を移行する 既存の銀行口座を Payment Intents API または Checkout Sessions API に移行する方法をご紹介します。 > #### Accounts v2 API を使用した顧客の表現 > > Accounts v2 API では、Connect ユーザーには一般提供され、その他の Stripe ユーザーには公開プレビューで提供されます。Accounts v2 プレビューの一部である場合は、コードで[プレビューバージョン](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning)を指定する必要があります。 > > Accounts v2 プレビューへのアクセスをリクエストするには、 > > For most use cases, we recommend [modeling your customers as customer-configured Account objects](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) instead of using [Customer](https://docs.stripe.com/api/customers.md) objects. Stripe は、[レガシーの組み込み](https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges.md#identify-legacy-payments)を使用した [ACH Direct Debit](https://docs.stripe.com/ach-deprecated.md) のサポートを終了します。 レガシーの ACH Direct Debit 決済を作成する場合は、[Payment Intents API](https://docs.stripe.com/api/payment_intents.md) または [Checkout Sessions API](https://docs.stripe.com/api/checkout/sessions.md) に移行する必要があります。 以前に [Tokens API](https://docs.stripe.com/ach-deprecated.md) を使用して Stripe で顧客支払いの詳細を収集した場合は、保存した`銀行口座`を*PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs)として引き続き使用できます。 [Payment Intents API](https://docs.stripe.com/api/payment_intents.md) または [Checkout Sessions API](https://docs.stripe.com/payments/quickstart-checkout-sessions.md) で顧客 [銀行口座](https://docs.stripe.com/api/customer_bank_accounts.md)を使用できるのは、次の要件を満たした後のみです。 - **Checkout Sessions API:** 顧客の銀行口座が確認されました。 - **Payment Intents API:** 顧客の銀行口座が確認されており、その銀行口座に対して有効な[同意書](https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges.md#mandate-acknowledgement)が存在します。 Payment Intents または Checkout Sessions で使用するために、確認済みの銀行口座を再確認する必要はありません。 # Checkout Sessions API > This is a Checkout Sessions API for when integration-path is checkout. View the full page at https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges?integration-path=checkout. ## Checkout Sessions を使用する Checkout で以前に保存および確認された銀行口座を表示するには、以下を行う必要があります。 - `customer` パラメーターを指定して Checkout セッションを作成する - フィルターを `['unspecified', 'always']` に設定する - `payment_method_types` に `us_bank_account` を指定 これらの要件が満たされると、Checkout は自動的にその顧客に関連付けられたすべての保存済みかつ確認済みの銀行口座を検出して表示するため、支払い情報を再度収集する必要がなくなります。 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d mode=payment \ -d ui_mode=elements \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method_types[0]=us_bank_account" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=T-shirt" \ -d "line_items[0][price_data][unit_amount]=1099" \ -d "line_items[0][quantity]=1" \ -d "saved_payment_method_options[allow_redisplay_filters][0]=unspecified" \ -d "saved_payment_method_options[allow_redisplay_filters][1]=always" \ --data-urlencode "return_url=YOUR_DOMAIN/complete?session_id={CHECKOUT_SESSION_ID}" ``` `customer` にメールアドレスが紐付いている場合、[Session](https://docs.stripe.com/js/custom_checkout/session_object) に顧客のメールアドレスが事前入力され、変更することはできません。メールアドレスの有無を確認し、それに応じてメール入力欄を表示する必要があります。 #### React ```javascript const {checkout} = useCheckoutElements(); const currentEmail = checkout.email; if (currentEmail) { return ; } ``` #### HTML/JavaScript ```javascript const emailInput = document.getElementById("email"); const loadActionsResult = await checkout.loadActions(); const session = loadActionsResult.actions.getSession(); const currentEmail = session.email; if (currentEmail) { emailInput.value = currentEmail; emailInput.readOnly = true; emailInput.classList.add('read-only'); } ``` # Payment Intents API > This is a Payment Intents API for when integration-path is payment-intent. View the full page at https://docs.stripe.com/payments/ach-direct-debit/migrating-from-charges?integration-path=payment-intent. ## 同意書承認を収集する PaymentIntent または SetupIntent を確定するには、顧客に口座から引き落とすための[同意書](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-mandate_data)を承認してもらう必要があります。自社のビジネスに適した承認の種類については、[SEC コード](https://docs.stripe.com/payments/ach-direct-debit/sec-codes.md)をご覧ください。 顧客から以前の購入の際に収集した事前オーソリの情報、または Setup Intent をお持ちの場合には、これを使用して *オフセッション* (A payment is described as off-session if it occurs without the direct involvement of the customer, using previously-collected payment information) の支払いを作成できます。例えば次のような場合です。 - 過去に顧客からオンラインで同意書を取得している場合、IP アドレスとユーザーエージェントの情報の双方を利用して`同意書`オブジェクトを作成できます。顧客の IP アドレスやユーザーエージェントの情報を保存していない場合には、プレースホルダデータをご提供ください。プレースホルダデータを提供する場合は、今後容易に識別できる値を選択してください。 - 以前に支払いと同意書の情報をオフラインで収集している場合は、[PPD 同意書](https://docs.stripe.com/payments/ach-direct-debit/sec-codes.md#ppd-sec-code)を作成できます。 承認が必要なのは Payment Intents または Setup Intents API とともに `BankAccount` オブジェクトを初めて使ったときです。2 回目以降は `BankAccount` オブジェクトを PaymentMethod として使用して [決済を受け付ける](https://docs.stripe.com/payments/ach-direct-debit/set-up-payment.md#web-future-payments) ことができます。 Setup Intent を作成、確認することで `委任状` を作成することができます。その際顧客に依頼する必要はありません。 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{BANKACCOUNT_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d "mandate_data[customer_acceptance][type]=offline" \ -d "mandate_data[customer_acceptance][accepted_at]=123456789" \ -d confirm=true ``` Payment Intent の確定時に必須のデータを指定することもできます。 ```curl curl https://api.stripe.com/v1/payment_intents/{{PAYMENTINTENT_ID}}/confirm \ -u "<>:" \ -d "mandate_data[customer_acceptance][type]=offline" \ -d "mandate_data[customer_acceptance][accepted_at]=123456789" \ -d "payment_method_options[us_bank_account][mandate_options][collection_method]=paper" ``` ## 銀行口座を使用して PaymentIntent を作成する 保存済みの `BankAccount` を PaymentIntent 作成時の *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) として使用できます。これにより、支払い情報を再度収集する必要がなくなります。ただし、[組み込みも更新](https://docs.stripe.com/payments/ach-direct-debit/accept-a-payment.md)して、Bank Account ではなく PaymentMethod を作成するように変更することを忘れないでください。 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{BANKACCOUNT_ID}}" \ -d "payment_method_types[]=us_bank_account" \ -d amount=1099 \ -d currency=usd ``` 同様に、SetupIntent を作成するときに、保存した BankAccount を PaymentMethod として使用できます。 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "payment_method={{BANKACCOUNT_ID}}" \ -d "payment_method_types[]=us_bank_account" ``` ## PaymentMethod として BankAccount を取得する [Payment Methods API](https://docs.stripe.com/api/payment_methods.md) を通じて、保存されている BankAccounts を取得できます。 ```curl curl https://api.stripe.com/v1/payment_methods/{{BANKACCOUNT_ID}} \ -u "<>:" ``` BankAccount を PaymentMethod として使用する場合、新しいオブジェクトは作成されません。Payment Methods API は、基となる同じオブジェクトの異なるビューを提供するだけです。 #### PaymentMethod ビュー ```json { "id": "ba_1IsleZ2eZvKYlo2CI3To1g72", "object": "payment_method", "billing_details": { "address": { "city": null, "country": null, "line1": null, "line2": null, "postal_code": null, "state": null }, "email": null, "name": "Jenny Rosen", "phone": null }, "us_bank_account": { "last4": "6789", "routing_number": "110000000", "fingerprint": "1JWtPxqbdX5Gamtc", "account_holder_type": "individual", "bank_name": "STRIPE TEST BANK", }, "created": 123456789, "customer": "cus_CY5bH92D99f4mn", "livemode": false, "metadata": {}, "type": "us_bank_account" } ``` #### BankAccount ビュー ```json { "id": "ba_1IsleZ2eZvKYlo2CI3To1g72", "object": "bank_account", "account_holder_name": "Jenny Rosen", "account_holder_type": "individual", "bank_name": "STRIPE TEST BANK", "country": "US", "currency": "usd", "customer": "cus_CY5bH92D99f4mn", "fingerprint": "1JWtPxqbdX5Gamtc", "last4": "6789", "metadata": {}, "routing_number": "110000000", "status": "verified", } ``` ## 請求書 委任状の取得後に [Invoicing](https://docs.stripe.com/invoicing.md) を利用して継続するには、顧客のデフォルトの決済方法を更新するか、`default_payment_method` パラメーターを設定する必要があります。 顧客の初期設定の決済方法を更新するには: ```curl curl https://api.stripe.com/v1/customers/{{CUSTOMER_ID}} \ -u "<>:" \ -d "invoice_settings[default_payment_method]={{BANKACCOUNT_ID}}" ``` 決済方法として銀行口座を指定して請求書を作成するには、以下のようにします。 ```curl curl https://api.stripe.com/v1/invoices \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "default_payment_method={{BANKACCOUNT_ID}}" ``` ## サブスクリプション 委任状の取得後に [Subscriptions](https://docs.stripe.com/subscriptions.md) を利用して継続するには、顧客のデフォルトの決済方法を更新するか、`default_payment_method` パラメーターを設定する必要があります。 顧客の初期設定の決済方法を更新するには: ```curl curl https://api.stripe.com/v1/customers/{{CUSTOMER_ID}} \ -u "<>:" \ -d "invoice_settings[default_payment_method]={{BANKACCOUNT_ID}}" ``` 決済方法として銀行口座を指定してサブスクリプションを作成する方法は以下の通りです。 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "default_payment_method={{BANKACCOUNT_ID}}" \ -d "items[0][price]=price_1MowQULkdIwHu7ixraBm864M" ``` ## レガシー ACH 決済を特定する [Charge](https://docs.stripe.com/api/charges/object.md) オブジェクトの `payment_method_details.type` プロパティは、従来の導入では `ach_debit`、新しい導入では `us_bank_account` です。 レガシーの ACH 支払いは、レガシーの `BankAccount` が支払い [source](https://docs.stripe.com/api/charges/object.md#charge_object-source) である場合に作成されます。これは次の場合に発生します。 - [Create Charge API](https://docs.stripe.com/api/charges/create.md) を呼び出します。 - [サブスクリプション](https://docs.stripe.com/billing/subscriptions/overview.md)または[請求書](https://docs.stripe.com/invoicing/overview.md)は、`default_source` が従来の BankAccount であり、顧客、サブスクリプション、請求書に `default_payment_method` が設定されていない顧客に請求します。 - `payment_method_type` に `ach_debit` を指定して PaymentIntent API を呼び出します。