コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
始める
支払い
財務の自動化
始める
支払い
財務の自動化
プラットフォームおよびマーケットプレイス
資金管理
概要すべての商品を確認する
構築を開始する
開発の開始
サンプルプロジェクト
API について
    API ツアー
    Payment Intents API
    Setup Intents API
    支払い方法
    商品と価格
    以前の API
      支払い
      Sources
        新しい API への移行
        カードソース
        ソースと顧客
        ACH ダイレクトデビット
        Connect プラットフォーム
        ベストプラクティス
        iOS
        Android
    リリースフェーズ
Build with LLMs
ノーコードで Stripe を使用する
Stripe を設定する
アカウントを作成する
ウェブダッシュボード
モバイルダッシュボード
Stripe に移行
不正利用のリスク管理
不正利用について
Radar の不正防止
不審請求の申請の管理
本人確認
ホーム始めるAbout the APIsOlder APIsSources

注

このページはまだ日本語ではご利用いただけません。より多くの言語で文書が閲覧できるように現在取り組んでいます。準備が整い次第、翻訳版を提供いたしますので、もう少しお待ちください。

Charges を使用した ACH ダイレクトデビット非推奨

過去の Charges API で ACH 支払いを受け付けるための従来のガイド。

ページをコピー

レガシー

以下の内容では、ACH 支払いを収集するための レガシーの方法について説明します。

新しい実装を構築する場合は、代わりに ACH 支払いを受け付けるための現在の方法のいずれかを使用してください。

Charges API を使用して ACH 支払いを受け付ける既存のシステムがある場合は、Payment Intents API への移行することをお勧めします。Payment Intents API には即時確認の機能が付属しています。

ACH を使用した USD 銀行振込

また、顧客から USD 銀行振込を使用して送金された ACH クレジットの支払いを受け取ることもできます。

Stripe では、支払いリクエストの source 引数として確認済みの銀行口座を指定することにより、クレジットカードでの支払いの受け付けとほぼ同じ方法で ACH 支払いを受け付けることができます。ただし、銀行口座を受け付ける場合、初回のワークフローがクレジットカードの受け付け時と若干異なります。

  1. 最初に銀行口座を確認する必要があります。
  2. 顧客がお客様による銀行口座の使用を許可している必要があります。

銀行口座に対して両方の手順を実行すると、顧客は、継続支払いや Connect アプリケーションなど、他の支払い方法と同じように銀行口座を使用できます。 銀行口座を使用する場合とクレジットカードを使用する場合の 2 つの主な違いは次のとおりです。

  • ACH 支払いは、成功または失敗の確認を受け取るまでに最大 5 営業日かかります。このため、ACH 支払いが利用可能な Stripe 残高に反映されるまでに最大 7 営業日かかります。
  • 受け付けられる売上は、USD 建てで、なおかつアメリカの銀行口座からのものに限定されます。さらに、ACH 支払いを受け付けるには、お客様のアカウントがアメリカにドル建ての銀行口座を保持している必要があります。

銀行口座を収集して確認する

Before you can create an ACH charge, you must first collect and verify your customer’s bank account and routing number. To properly identify the bank account, you also need to collect the name of the person or business who owns the account, and if the account is owned by an individual or a company. Stripe provides two methods for doing so: instant collection and verification with Plaid or collection using Stripe.js with delayed-verification using microdeposits. You may incur additional costs when using Plaid, depending on the size of your business. Take this into account when making your decision.

銀行口座への請求には、口座の確認と顧客による許可の両方が必要であるため、ベストプラクティスとして、後で再利用できるように Stripe の Customer オブジェクトに銀行口座を保存します。

Plaid を使用する

Plaid のロゴ

Plaid を利用すると、顧客の銀行情報を素早く収集し確認するできます。Stripe + Plaid の組み込みを使用することで、確認済みの銀行口座情報を即座に受け取ることができるため、直ちに請求できます。これを実行するには Plaid Link を使用します。Plaid から直接 Stripe 銀行口座トークンを受け取ることができます。

ステップ 1: Plaid アカウントを設定する

Plaid アカウントをお持ちでない場合は、アカウントを作成します。アカウントでは、組み込みへのアクセスが自動的に有効化されます。Plaid アカウントで Stripe の組み込みが有効になっていることを確認するには、アカウントのダッシュボードで組み込みセクションに移動します。そこで、Stripe アカウントが連結されていることを確認してください。

ステップ 2: Link トークンを取得する

link_token は、Plaid Link を初期化する 1 回限りのトークンです。サーバーから Link トークンの作成エンドポイントを呼び出すことで、link_token を作成し、特定の Link フロー向けに設定できます。

Command Line
curl
curl https://sandbox.plaid.com/link/token/create \ -H "Content-Type: application/json" \ -d "{\"client_id\": \"{{PLAID_CLIENT_ID}}\",\"secret\": \"{{PLAID_SECRET}}\",\"client_name\": \"My App\",\"user\": {\"client_user_id\": \"Stripe test\"},\"products\": [\"auth\"],\"country_codes\": [\"US\"],\"language\": \"en\", \"webhook\": \"https://webhook.sample.com/\"}"

ステップ 3: Plaid Link を導入する

Link の導入に必要なのは、クライアント側の数行の JavaScript とサーバー側の小さいハンドラーだけです。これを使用して、Link の public_token を Plaid の access_token と 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_token と accounts 配列を返します。これは metadata オブジェクトのプロパティであり、onSuccess コールバックの一部です。

accounts 配列には、ユーザーが入力した認証情報に関連付けられた銀行口座に関する情報が格納されます。ユーザーがその金融機関に複数の銀行口座を保有している場合は、複数の口座が含まれる場合があります。ユーザーが Stripe でどのアカウントを使用すべきか悩まないように、Plaid 開発者ダッシュボードの Select Account (アカウントを選択) を Enabled for one account (1 つのアカウントで有効化) に設定します。この設定を選択すると、accounts 配列に含まれる Element が常に 1 つだけになります。

サーバに public_token と account_id がある場合、Plaid サーバに対する呼び出しを 2 回実行して、Stripe の銀行口座トークンを、他の Plaid API リクエストに使用する Plaid access_token とともに取得する必要があります。

Command Line
curl
curl https://sandbox.plaid.com/item/public_token/exchange \ -H "Content-Type: application/json" \ -d "{\"client_id\": \"{{PLAID_CLIENT_ID}}\", \"secret\": \"{{PLAID_SECRET}}\", \"public_token\": \"{{PLAID_LINK_PUBLIC_TOKEN}}\"}" curl https://sandbox.plaid.com/processor/stripe/bank_account_token/create \ -H "Content-Type: application/json" \ -d "{\"client_id\": \"{{PLAID_CLIENT_ID}}\", \"secret\": \"{{PLAID_SECRET}}\", \"access_token\": \"{{PLAID_ACCESS_TOKEN}}\", \"account_id\": \"{{PLAID_ACCOUNT_ID}}\"}"

レスポンスには、確認済みの Stripe 銀行口座トークン ID が含まれます。このトークンを Stripe の Customer オブジェクトに関連付けたり、このトークンで支払いを直接作成したりできます。

{ "stripe_bank_account_token": "btok_U6Wjr8vGyMwrmGriArwE", "request_id": "[Unique request ID]" }

ステップ 5: 本番環境に向けた準備をする

Plaid は、テストと本番のリクエストに異なる API ホストを使用します。上記のリクエストは、Plaid の Sandbox 環境を使用し、シミュレーションデータを使用しています。実際のユーザでテストするには、Plaid の開発環境を使用します。Plaid の開発環境は、最大 100 個の本番オブジェクトをサポートし、これらについてお客様に対する請求は発生しません。本番環境に移行する際は、Plaid の本番環境を使用します。

手動で銀行口座を収集して確認する

Plaid は、ほとんどの主要銀行に対して即時確認をサポートしています。ただし、顧客の銀行がサポート対象に含まれない場合、またはお客様が Plaid の導入を希望しない場合は、Stripe のみを使用して顧客の銀行の収集と確認を行います。

まず、Stripe.js を使用して顧客の銀行口座情報を安全に収集し、それを表すトークンを受け取ります。受け取ったトークンを、アカウント内の Stripe の顧客に関連付けます。Nacha の規則に準拠するため、口座名義人が有効な名前で入力されていることを確認してください。

Command Line
curl
curl https://api.stripe.com/v1/customers \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "name"="Jenny Rosen" \ -d "source"="btok_4XNshPRgmDRCVi"

Customer の銀行口座の確認が必要です。 Plaid なしで Stripe を使用する場合、Stripe は自動的に 2 回の少額入金を行います。この入金が顧客のオンライン明細書に表示されるまでには、 1 ~ 2 営業日かかります。明細書に ACCTVERIFY を含む説明が含まれており、顧客はこれらの金額をお客様に伝える必要があります。

これらの金額を受け付けるとき、確認試行の失敗が 3 回までに制限されることに注意してください。この制限を超えると、銀行口座を確認できなくなります。顧客に対して、マイクロデポジットとは何か、それがどのように使用されるのかを明確に伝えることで、確認の際に問題が発生しないようにします。マイクロデポジットを受け取り次第、銀行口座を確認することができます。

Command Line
curl
curl https://api.stripe.com/v1/customers/cus_AFGbOSiITuJVDs/sources/ba_17SHwa2eZvKYlo2CUx7nphbZ/verify \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "amounts[]"=32 \ -d "amounts[]"=45

銀行口座が確認されると、その口座に対して支払いを作成することができます。

支払いの許可

ACH 支払いを作成する前に、口座から引き落とすための許可を顧客から取得します。そうすることで、ACH ネットワークへのコンプライアンスが確保され、不審請求の申請、追加手数料、支払いの差戻しからお客様を保護します。許可要件の詳細については、サポートページをご覧ください。

ACH 支払いを作成する

確認済みの銀行口座に対して支払いを作成するには、カードを使用する場合と同じ方法で、保存されている Customer オブジェクトを使用します。

Command Line
cURL
curl https://api.stripe.com/v1/charges \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1500 \ -d currency=usd \ -d customer=cus_AFGbOSiITuJVDs

Attempting to charge an unverified bank account results in an error with the message “The customer’s bank account must be verified to create an ACH payment.”

顧客がソース (タイプは問わない) を複数保存している場合は、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 営業日かかる場合があることをすぐに顧客に通知する必要があります。

返金

Refund エンドポイントを使用して、最初の支払い日から最大 90 日間、ACH 料金を返金できます。ACH の返金のタイミングとリスクは、カードの返金とは異なります。Stripe では、ACH 返金が成功した場合の通知はありませんが、ACH 返金を処理できない場合は refund.failed イベントが送信されます。失敗した場合は、Stripe 以外で顧客に資金を返金する必要があります。これは稀なケースで、通常は元の支払いから返金リクエストまでの間にアカウントが凍結された場合にのみ発生します。

ACH 固有の Webhook 通知

ACH を使用すると、標準的な支払い Webhook 通知が多数届きますが、以下のように注意が必要な違いがいくつかあります。

  • 支払いを作成すると、charge.pending 通知が届きます。最大 5 営業日後まで charge.succeeded または charge.failed の通知は届きません。
  • 支払いが succeeded に移行し、残高で売上が利用可能になると、charge.succeeded 通知が届きます。
  • 何らかの理由で ACH 送金が失敗した場合は、charge.failed 通知が届きます。支払いの failure_code と failure_message が設定され、この時点で、資金は Stripe の保留中の残高から差し引かれます。
  • 銀行口座が問題なく確認されると、customer.source.updated 通知が届きます。銀行口座の status は verified に設定されます。
  • 2 つの少額の入金のいずれかが失敗したために銀行口座を確認できなかった場合は、customer.source.updated 通知が届きます。銀行口座の status は verification_failed に設定されます。

Connect のサポート

Connect を使用すると、支払いの処理の間にプラットフォームで収益を得ることができます。次のいずれかを実行できます。

  • 連結アカウントで顧客を作成してから、ダイレクト支払いを作成する
  • プラットフォームアカウントで顧客を作成してから、transfer_data パラメーター (以下のコードなど) を使用してデスティネーション支払いを作成する
Command Line
cURL
curl https://api.stripe.com/v1/charges \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1500 \ -d currency=usd \ -d customer=cus_AFGbOSiITuJVDs \ -d "transfer_data[amount]"=850 \ -d "transfer_data[destination]"={{CONNECTED_STRIPE_ACCOUNT_ID}}

利用規約

本番環境 API の使用は、Stripe 利用規約の対象となります。利用規約に関してご不明な点がございましたら、お問い合わせください。

このページはお役に立ちましたか。
はいいいえ
お困りのことがございましたら 、サポートにお問い合わせください。
早期アクセスプログラムにご参加ください。
変更ログをご覧ください。
ご不明な点がございましたら、お問い合わせください。
LLM ですか?llms.txt を読んでください。
Powered by Markdoc