Charges を使用した ACH ダイレクトデビット非推奨
過去の Charges API で ACH 支払いを受け付けるための従来のガイド。
レガシー
以下の内容では、ACH 支払いを収集するための レガシーの方法について説明します。
新しい実装を構築する場合は、代わりに ACH 支払いを受け付けるための現在の方法のいずれかを使用してください。
Charges API を使用して ACH 支払いを受け付ける既存のシステムがある場合は、Payment Intents API への移行することをお勧めします。Payment Intents API には即時確認の機能が付属しています。
Stripe では、支払いリクエストの source
引数として確認済みの銀行口座を指定することにより、クレジットカードでの支払いの受け付けとほぼ同じ方法で ACH 支払いを受け付けることができます。ただし、銀行口座を受け付ける場合、初回のワークフローがクレジットカードの受け付け時と若干異なります。
銀行口座に対して両方の手順を実行すると、顧客は、継続支払いや Connect アプリケーションなど、他の支払い方法と同じように銀行口座を使用できます。 銀行口座を使用する場合とクレジットカードを使用する場合の 2 つの主な違いは次のとおりです。
- ACH 支払いは、成功または失敗の確認を受け取るまでに最大 5 営業日かかります。このため、ACH 支払いが利用可能な Stripe 残高に反映されるまでに最大 7 営業日かかります。
- 受け付けられる売上は、USD 建てで、なおかつアメリカの銀行口座からのものに限定されます。さらに、ACH 支払いを受け付けるには、お客様のアカウントがアメリカにドル建ての銀行口座を保持している必要があります。
銀行口座を収集して確認する
ACH 支払いを作成する前に、まず顧客の銀行口座と金融番号を収集・確認する必要があります。銀行口座を正しく確認するために、口座を保有する個人または会社の名前を収集し、口座の名義が個人と会社のいずれかと一致していることを確認する必要もあります。Stripe では、このための方法を 2 つ用意しています。その 1 つは、Plaid を使用した即時の収集と確認です。もう 1 つは、マイクロデポジットにより遅発の確認を行う、Stripe.js を使用した収集です。ビジネスの規模によっては、Plaid を使用する際に追加料金が発生することがあるため、判断の際にはその点も考慮してください。
銀行口座への請求には、口座の確認と顧客による許可の両方が必要であるため、ベストプラクティスとして、後で再利用できるように Stripe の Customer
オブジェクトに銀行口座を保存します。
Plaid を使用する
Plaid を利用すると、顧客の銀行情報を素早く収集し確認するできます。Stripe + Plaid の組み込みを使用することで、確認済みの銀行口座情報を即座に受け取ることができるため、直ちに請求できます。これを実行するには Plaid Link を使用します。Plaid から直接 Stripe 銀行口座トークンを受け取ることができます。
ステップ 1: Plaid アカウントを設定する
Plaid アカウントをお持ちでない場合は、アカウントを作成します。アカウントでは、組み込みへのアクセスが自動的に有効化されます。Plaid アカウントで Stripe の組み込みが有効になっていることを確認するには、アカウントのダッシュボードで組み込みセクションに移動します。そこで、Stripe アカウントが連結されていることを確認してください。
ステップ 2: Link トークンを取得する
link_
は、Plaid Link を初期化する 1 回限りのトークンです。サーバーから Link トークンの作成エンドポイントを呼び出すことで、link_token を作成し、特定の Link フロー向けに設定できます。
ステップ 3: Plaid Link を導入する
Link の導入に必要なのは、クライアント側の数行の JavaScript とサーバー側の小さいハンドラーだけです。これを使用して、Link の public_
を Plaid の access_
と Stripe の銀行口座トークンに交換します。
<button id="link-button">Link Account</button> <script src="https://cdn.plaid.com/link/v2/stable/link-initialize.js"></script> <script type="text/javascript"> (async function() { const configs = { // Pass the link_token generated in step 2. token: '{{LINK_TOKEN}}', onLoad: function() { // The Link module finished loading. }, onSuccess: function(public_token, metadata) { // The onSuccess function is called when the user has // successfully authenticated and selected an account to // use. // // When called, you will send the public_token // and the selected account ID, metadata.accounts, // to your backend app server. // // sendDataToBackendServer({ // public_token: public_token, // account_id: metadata.accounts[0].id // }); console.log('Public Token: ' + public_token); switch (metadata.accounts.length) { case 0: // Select Account is disabled: https://dashboard.plaid.com/link/account-select break; case 1: console.log('Customer-selected account ID: ' + metadata.accounts[0].id); break; default: // Multiple Accounts is enabled: https://dashboard.plaid.com/link/account-select } }, onExit: async function(err, metadata) { // The user exited the Link flow. if (err != null) { // The user encountered a Plaid API error // prior to exiting. } // metadata contains information about the institution // that the user selected and the most recent // API request IDs. // Storing this information can be helpful for support. }, }; var linkHandler = Plaid.create(configs); document.getElementById('link-button').onclick = function() { linkHandler.open(); }; })(); </script>
ステップ 4: サーバ側ハンドラを作成する
Link モジュールでは、アカウント登録フロー全体を安全かつ迅速に処理しますが、実際にユーザーのアカウントデータは取得しません。代わりに Link モジュールは public_
と accounts
配列を返します。これは metadata
オブジェクトのプロパティであり、onSuccess
コールバックの一部です。
accounts
配列には、ユーザーが入力した認証情報に関連付けられた銀行口座に関する情報が格納されます。ユーザーがその金融機関に複数の銀行口座を保有している場合は、複数の口座が含まれる場合があります。ユーザーが Stripe でどのアカウントを使用すべきか悩まないように、Plaid 開発者ダッシュボードの Select Account (アカウントを選択) を Enabled for one account (1 つのアカウントで有効化) に設定します。この設定を選択すると、accounts 配列に含まれる Element が常に 1 つだけになります。
サーバに public_
と account_
がある場合、Plaid サーバに対する呼び出しを 2 回実行して、Stripe の銀行口座トークンを、他の Plaid API リクエストに使用する Plaid access_
とともに取得する必要があります。
レスポンスには、確認済みの Stripe 銀行口座トークン ID が含まれます。このトークンを Stripe の Customer
オブジェクトに関連付けたり、このトークンで支払いを直接作成したりできます。
{ "stripe_bank_account_token": "btok_FYsfJPd0TEKD7XVXrf5b", "request_id": "[Unique request ID]" }
ステップ 5: 本番環境に向けた準備をする
Plaid は、テストと本番のリクエストに異なる API ホストを使用します。上記のリクエストは、Plaid の Sandbox 環境を使用し、シミュレーションデータを使用しています。実際のユーザでテストするには、Plaid の開発環境を使用します。Plaid の開発環境は、最大 100 個の本番オブジェクトをサポートし、これらについてお客様に対する請求は発生しません。本番環境に移行する際は、Plaid の本番環境を使用します。
手動で銀行口座を収集して確認する
Plaid は、ほとんどの主要銀行に対して即時確認をサポートしています。ただし、顧客の銀行がサポート対象に含まれない場合、またはお客様が Plaid の導入を希望しない場合は、Stripe のみを使用して顧客の銀行の収集と確認を行います。
まず、Stripe.js を使用して顧客の銀行口座情報を安全に収集し、それを表すトークンを受け取ります。受け取ったトークンを、アカウント内の Stripe の顧客に関連付けます。Nacha の規則に準拠するため、口座名義人が有効な名前で入力されていることを確認してください。
Customer の銀行口座の確認が必要です。 Plaid なしで Stripe を使用する場合、Stripe は自動的に 2 回の少額入金を行います。この入金が顧客のオンライン明細書に表示されるまでには、 1 ~ 2 営業日かかります。明細書に ACCTVERIFY
を含む説明が含まれており、顧客はこれらの金額をお客様に伝える必要があります。
これらの金額を受け付けるとき、確認試行の失敗が 3 回までに制限されることに注意してください。この制限を超えると、銀行口座を確認できなくなります。顧客に対して、マイクロデポジットとは何か、それがどのように使用されるのかを明確に伝えることで、確認の際に問題が発生しないようにします。マイクロデポジットを受け取り次第、銀行口座を確認することができます。
銀行口座が確認されると、その口座に対して支払いを作成することができます。
支払いの許可
ACH 支払いを作成する前に、口座から引き落とすための許可を顧客から取得します。そうすることで、ACH ネットワークへのコンプライアンスが確保され、不審請求の申請、追加手数料、支払いの差戻しからお客様を保護します。許可要件の詳細については、サポートページをご覧ください。
ACH 支払いを作成する
確認済みの銀行口座に対して支払いを作成するには、カードを使用する場合と同じ方法で、保存されている Customer
オブジェクトを使用します。
未確認の銀行口座に請求しようとすると、エラーが発生し、「The customer’s bank account must be verified in order to create an ACH payment (ACH 支払いを作成するには顧客の銀行口座を確認する必要があります)」というメッセージが表示されます。
顧客がソース (タイプは問わない) を複数保存している場合は、source パラメーターとして ID を渡して、使用する銀行口座を指定します。
この実装をテストする
以下の銀行金融番号と口座番号を使用して、ACH による支払いの成功と失敗を再現できます。
- 金融番号:
110000000
- 口座番号:
000123456789
(成功)000111111116
(使用時に失敗)000111111113
(口座解約済み)000222222227
(NSF/残高不足)000333333335
(オーソリされていない引き落とし)000444444440
(無効な通貨)
銀行口座の確認の成功または失敗を再現するには、以下の特定の金額を使用してください。
[32, 45]
(成功)[any other number combinations]
(失敗)
ACH 支払いのワークフロー
ACH 支払いは、成功または失敗の確認を受け取るまでに最大 5 営業日かかります。
- ACH 支払いが作成されると、初期ステータスは
pending
になります。 - 「保留中」の残高取引は、支払い金額から Stripe 手数料を差し引いた金額ですぐに作成されます。
- 現在、22:00 UTC 以降に作成された支払いは、翌営業日に処理されます。
- その後の 4 営業日の間に、支払いは顧客の銀行に応じて
succeeded
またはfailed
のいずれかに移行します。 - 成功した ACH 支払いは、7 営業日後に Stripe の利用可能な残高に反映されます。その時点で、売上がお客様の銀行口座への自動または手動の送金に利用可能になります。
- ACH 支払いが失敗すると、作成された「保留中」の取引残高が差戻されます。
- 支払いの 1 ~ 2 日後に、顧客の銀行明細書に支払いが反映されます。(銀行が Stripe に通知する前に、顧客は支払いが成功したかどうかを確認できます。)
支払いの失敗が発生する原因は、資金不足、口座番号の不備、顧客が銀行口座からの引き落としを無効にしている、などさまざまです。
まれに、支払いが succeeded
に移行した後に、Stripe が銀行から ACH の失敗を受け取ることがあります。この場合、Stripe は以下の reason
で不審請求の申請を作成します。
insufficient_
funds incorrect_
account_ details bank_
cannot_ process
この場合、Stripe は失敗の手数料を請求します。
この実装で不審請求の申請に対処する
ACH 決済に関する不審請求の申請は、クレジットカード決済の場合とは根本的に異なります。顧客の銀行が、不審請求を申請された支払いに対する売上の返金のリクエストを受け入れた場合、Stripe は直ちにお客様の Stripe アカウントからその金額を差し引きます。クレジットカードの不審請求の申請とは異なり、ACH の差戻しに対して異議を申し立てることはできません。顧客に連絡して問題を解決する必要があります。
一般的に、顧客は銀行を通じて、個人口座では引き落とし後 60 日以内、ビジネス口座では 2 営業日以内に ACH ダイレクトデビットによる決済について不審請求の申請を行うことができます。まれに、これらの期間外でも引き落とし決済に対する不審請求の申請が成功することがあります。
ACH の返金と不審請求の申請による二重クレジットのリスク
顧客の銀行が不審請求の申請を開始しているときに、お客様が顧客に対し先を見越して返金を発行すると、顧客が同じ取引に対してクレジットを 2 回受け取ることがあります。
ACH 支払いに対する返金を行う場合は、返金を行うことと、資金が銀行口座に表示されるまでに 2 〜 5 営業日かかる場合があることをすぐに顧客に通知する必要があります。
返金
ACH 支払いは、Refund (返金) エンドポイントを使用して元の決済日から最大で 90 日間返金できますが、ACH の返金のタイミングとリスクは、カードへの返金の場合とは異なります。ACH 支払いの返金が完了しても、Stripe からの通知はありません。ただし、ACH 支払いの返金が失敗した場合は、refund.
という通知が届きます。この通知を受け取った場合、Stripe で返金を処理できていないため、Stripe 以外で顧客に売上を返金する必要があります。このようなケースはまれですが、最初の支払いから、返金リクエストが行われるまでの間にアカウントが凍結された場合に発生することがあります。
ACH 固有の Webhook 通知
ACH を使用すると、標準的な支払い Webhook 通知が多数届きますが、以下のように注意が必要な違いがいくつかあります。
- 支払いを作成すると、
charge.
通知が届きます。最大 5 営業日後までpending charge.
またはsucceeded charge.
の通知は届きません。failed - 支払いが
succeeded
に移行し、残高で売上が利用可能になると、charge.
通知が届きます。succeeded - 何らかの理由で ACH 送金が失敗した場合は、
charge.
通知が届きます。支払いのfailed failure_
とcode failure_
が設定され、この時点で、資金は Stripe の保留中の残高から差し引かれます。message - 銀行口座が問題なく確認されると、
customer.
通知が届きます。銀行口座のsource. updated status
はverified
に設定されます。 - 2 つの少額の入金のいずれかが失敗したために銀行口座を確認できなかった場合は、
customer.
通知が届きます。銀行口座のsource. updated status
はverification_
に設定されます。failed
Connect のサポート
Connect を使用すると、支払いの処理の間にプラットフォームで収益を得ることができます。次のいずれかを実行できます。
- 連結アカウントで顧客を作成してから、ダイレクト支払いを作成する
- プラットフォームアカウントで顧客を作成してから、
transfer_
パラメーター (以下のコードなど) を使用してデスティネーション支払いを作成するdata
利用規約
本番環境 API の使用は、Stripe 利用規約の対象となります。利用規約に関してご不明な点がございましたら、お問い合わせください。