コンテンツにスキップ
アカウントを作成
または
サインイン
Stripe ドキュメントのロゴ
/
AI に質問する
アカウントを作成
サインイン
始める
支払い
売上
プラットフォームおよびマーケットプレイス
資金管理
開発者向けのツール
概要
Stripe Payments について
構築済みのシステムをアップグレード
支払いの分析
オンライン決済
概要ユースケースを見つけるManaged Payments
Payment Links を使用する
決済ページを構築
高度なシステムを構築
アプリ内実装を構築
決済手段
決済手段を追加
    概要
    支払い方法の導入オプション
    ダッシュボードで支払い方法を管理
    決済手段のタイプ
    カード
    Stripe 残高で支払う
    仮想通貨
    銀行口座引き落とし
      ACH ダイレクトデビット
        決済を受け付ける
        銀行情報の保存
        Charges API からの移行
        他の決済代行業者からの移行
        ブロックされた銀行口座
        SEC コード
      Bacs ダイレクトデビット
      カナダのプレオーソリデビット
      オーストラリアの BECS ダイレクトデビット
      ニュージーランドの BECS ダイレクトデビット
      SEPA ダイレクトデビット
    銀行へのリダイレクト
    銀行振込
    クレジットトランスファー (Sources)
    後払い
    リアルタイム決済
    店舗支払い
    ウォレット
    国ごとに現地の支払い方法を有効化
    カスタムの決済手段
決済手段を管理
Link による購入の迅速化
支払いインターフェイス
Payment Links
Checkout
Web Elements
アプリ内 Elements
決済シナリオ
カスタムの決済フロー
柔軟なアクワイアリング
オーケストレーション
店頭支払い
端末
他の Stripe プロダクト
Financial Connections
仮想通貨
Climate
ホーム支払いAdd payment methodsBank debitsACH Direct Debit

注

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

ACH ダイレクトデビットによる支払いを受け付ける

カスタムの決済フォームを構築するか、Stripe Checkout を使用して、ACH ダイレクトデビットによる決済を受け付けます。

ページをコピー

Web サイトでの ACH ダイレクトデビットによる決済の受け付けは、以下のように構成されます。

  • 決済を追跡するためのオブジェクトを作成する
  • Stripe Financial Connections によって有効化される即時確認を使用して、支払い方法の情報を収集する
  • 決済を処理するために Stripe に送信する
  • 顧客の銀行口座を確認する

注

ACH ダイレクトデビットは通知遅延型の支払い方法であるため、決済後すぐには売上が利用可能になりません。通常、決済金額がお客様のアカウントに入金されるまでに 4 営業日かかります。

Stripe では、Payment Intent (支払いインテント) と呼ばれる決済オブジェクトを使用して、決済が完了するまでの状態のすべてを追跡および処理します。

Stripe を設定する
サーバー側

まず、Stripe アカウントが必要です。今すぐ登録してください。

アプリケーションから Stripe API にアクセスするには、Stripe の公式ライブラリを使用します。

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

顧客を作成または取得する
推奨
サーバー側

ユーザーがビジネスでアカウントを作成する際に、Customer オブジェクトを作成するか、このユーザーに関連付けられた既存の Customer を取得します。この Customer オブジェクトの ID を、顧客を表す社内の内部表記と関連付けることで、保存されている支払い方法の詳細を後で取得して使用することができます。Financial Connections のリピートユーザーの最適化を有効にするには、Customer にメールアドレスを含めます。

Command Line
cURL
curl https://api.stripe.com/v1/customers \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d email={{CUSTOMER_EMAIL}}

PaymentIntent を作成する
サーバー側

PaymentIntent (支払いインテント) は、顧客から支払いを回収する意図を表すオブジェクトで、決済プロセスのライフサイクルの各段階を追跡します。

サーバーで PaymentIntent を作成し、回収する金額と通貨 usd を指定します。Payment Intents API を使用した実装がすでにある場合は、PaymentIntent の支払い方法タイプのリストに us_bank_account を追加します。Customer の id を指定します。

将来その支払い方法を再利用する場合には、値を off_session に設定して setup_future_usage パラメーターを指定します。

Financial Connections 手数料の詳細については、料金体系の詳細をご覧ください。

デフォルトでは、銀行口座の支払い情報の収集では、手動の口座番号入力と少額入金の確認のフォールバックオプションを使用し、Financial Connections で顧客のアカウントを即時確認します。Financial Connections を設定し、ACH の実装を最適化するために追加の口座データにアクセスする方法については、Financial Connections に関するドキュメントをご覧ください。たとえば、Financial Connections を使用して、ACH 決済の開始前にアカウントの残高を確認できます。

注

顧客がアカウントを認証した後で、追加データにアクセスを拡張するには、権限を拡張してアカウントを再度関連付ける必要があります。

Command Line
cURL
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d amount=1099 \ -d currency=usd \ -d setup_future_usage=off_session \ -d customer={{CUSTOMER_ID}} \ -d "payment_method_types[]"=us_bank_account

client secret を取得する

PaymentIntent には、client secret が含まれています。これは、支払いプロセスを安全に完了するためにクライアント側で使用されます。client secret をクライアント側に渡す際は、いくつかの方法を使用できます。

ブラウザーの fetch 関数を使用して、サーバーのエンドポイントから client secret を取得します。この方法は、クライアント側が 1 ページのアプリケーションで、特に React などの最新のフロントエンドフレームワークで構築されている場合に最適です。client secret を処理するサーバーのエンドポイントを作成します。

main.rb
Ruby
get '/secret' do intent = # ... Create or retrieve the PaymentIntent {client_secret: intent.client_secret}.to_json end

その後、クライアント側で JavaScript を使用して client secret を取得します。

(async () => { const response = await fetch('/secret'); const {client_secret: clientSecret} = await response.json(); // Render the form using the clientSecret })();

支払い方法の詳細を収集する
クライアント側

顧客が ACH Direct Debitでの支払いをクリックしたときに、Stripe.js を使用してその支払いを Stripe に送信することをお勧めします。Stripe.js は、決済フローを構築するための Stripe の基本的な JavaScript ライブラリです。これにより、実装に関する複雑な処理が自動的に行われ、将来、他の決済手段にも対応できるように実装を簡単に拡張できます。

Stripe.js スクリプトを決済ページに含めるには、このスクリプトを HTML ファイルの head に追加します。

checkout.html
<head> <title>Checkout</title> <script src="https://js.stripe.com/v3/"></script> </head>

決済ページで以下の JavaScript を使用して、Stripe.js のインスタンスを作成します。

client.js
// Set your publishable key. Remember to change this to your live publishable key in production! // See your keys here: https://dashboard.stripe.com/apikeys const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
);

PaymentIntent オブジェクト全体をクライアントに送信する代わりに、前のステップからの client secret を使用します。これは、Stripe API リクエストを認証する API キーとは異なります。

client secret は支払いを完了できるため、慎重に取り扱う必要があります。記録したり、URL に埋め込んだり、当該の顧客以外に漏洩することがないようにしてください。

stripe.collectBankAccountForPayment を使用して、Financial Connections で銀行口座の詳細を収集し、PaymentMethod を作成して PaymentIntent に関連付けます。ACH ダイレクトデビットの PaymentMethod を作成するには、billing_details パラメーターに口座名義人を含める必要があります。

script.js
// Use the form that already exists on the web page. const paymentMethodForm = document.getElementById('payment-method-form'); const confirmationForm = document.getElementById('confirmation-form'); paymentMethodForm.addEventListener('submit', (ev) => { ev.preventDefault(); const accountHolderNameField = document.getElementById('account-holder-name-field'); const emailField = document.getElementById('email-field'); // Calling this method will open the instant verification dialog. stripe.collectBankAccountForPayment({ clientSecret: clientSecret, params: { payment_method_type: 'us_bank_account', payment_method_data: { billing_details: { name: accountHolderNameField.value, email: emailField.value, }, }, }, expand: ['payment_method'], }) .then(({paymentIntent, error}) => { if (error) { console.error(error.message); // PaymentMethod collection failed for some reason. } else if (paymentIntent.status === 'requires_payment_method') { // Customer canceled the hosted verification modal. Present them with other // payment method type options. } else if (paymentIntent.status === 'requires_confirmation') { // We collected an account - possibly instantly verified, but possibly // manually-entered. Display payment method details and mandate text // to the customer and confirm the intent once they accept // the mandate. confirmationForm.show(); } }); });

Financial Connections 認証フローでは、銀行口座の詳細の収集と確認を自動的に処理します。顧客が認証フローを完了すると、PaymentMethod が自動的に PaymentIntent に関連付けられ、Financial Connections アカウントが作成されます。

よくある間違い

手動入力と少額入金によって顧客が関連付けた銀行口座では、残高、所有権、取引などの追加の銀行口座データにアクセスできません。

すべてのデバイスで最適なユーザー体験を提供できるように、ビューポートの meta タグを使用して、ページのビューポートの minimum-scale を 1 に設定します。

<meta name="viewport" content="width=device-width, minimum-scale=1" />

オプションFinancial Connections 銀行口座のデータにアクセスする
サーバー側

同意書承認を収集し、決済を送信する
クライアント側

支払いを開始する前に、顧客に同意書の規約を表示して、顧客から承認を得る必要があります。

To be compliant with Nacha rules, you must obtain authorization from your customer before you can initiate payment by displaying mandate terms for them to accept. For more information on mandates, see Mandates.

顧客が同意書の規約を承認する場合、PaymentIntent を確定する必要があります。顧客がフォームを送信したら、stripe.confirmUsBankAccountPayment を使用して支払いを完了します。

script.js
confirmationForm.addEventListener('submit', (ev) => { ev.preventDefault(); stripe.confirmUsBankAccountPayment(clientSecret) .then(({paymentIntent, error}) => { if (error) { console.error(error.message); // The payment failed for some reason. } else if (paymentIntent.status === "requires_payment_method") { // Confirmation failed. Attempt again with a different payment method. } else if (paymentIntent.status === "processing") { // Confirmation succeeded! The account will be debited. // Display a message to customer. } else if (paymentIntent.next_action?.type === "verify_with_microdeposits") { // The account needs to be verified through microdeposits. // Display a message to consumer with next steps (consumer waits for // microdeposits, then enters a statement descriptor code on a page sent to them through email). } }); });

注

stripe.confirmUsBankAccountPayment の完了には数秒かかる場合があります。この間、フォームが再送信されないように無効化し、待機中のインジケーター (スピナーなど) を表示します。エラーが発生した場合は、それを顧客に表示し、フォームを再度有効化し、待機中のインジケーターを非表示にします。

成功した場合、Stripe から以下のいずれかのステータスで PaymentIntent オブジェクトが返されます。

ステータス説明次のステップ
requires_action銀行口座の確認を完了するには、追加のアクションが必要です。Step 6: Verifying bank accounts with microdeposits
processing銀行口座が即座に確認されたか、確認が必要ありません。Step 7: Confirm the PaymentIntent succeeded

After successfully confirming the PaymentIntent, an email confirmation of the mandate and collected bank account details must be sent to your customer. Stripe handles these by default, but you can choose to send custom notifications if you prefer.

少額入金で銀行口座を確認する
クライアント側

すべての顧客が銀行口座を即時に確認できるわけではありません。このステップは、顧客が前のステップで即時確認フローからオプトアウトした場合にのみ適用されます。

このような場合、Stripe は descriptor_code による少額入金を送金し、銀行口座の確認でさらに問題が発生した場合には、amount による少額入金に戻る場合があります。これらの入金が顧客のオンライン明細書に表示されるには 1 ~ 2 営業日かかります。

  • 明細書表記コード。SM で始まる一意の 6 桁の descriptor_code を指定して、0.01 USD の 1 件の少額入金を顧客の銀行口座に送金します。顧客は、この文字列を使用して、銀行口座を確認します。
  • 金額。Stripe は、ACCTVERIFY という明細書表記を使用し、一意でない 2 件の少額入金を顧客の銀行口座に送金します。顧客は、この入金額を使用して銀行口座を確認します。

前のステップの stripe.confirmUsBankAccountPayment メソッドの呼び出しの結果として、requires_action 状態の PaymentIntent が返されます。この PaymentIntent には、確認を完了するための有益な情報を含む next_action フィールドが含まれています。

next_action: { type: "verify_with_microdeposits", verify_with_microdeposits: { arrival_date: 1647586800, hosted_verification_url: "https://payments.stripe.com/…", microdeposit_type: "descriptor_code" } }

If you supplied a billing email, Stripe notifies your customer through this email when the deposits are expected to arrive. The email includes a link to a Stripe-hosted verification page where they can confirm the amounts of the deposits and complete verification.

警告

確認の失敗は、明細書表記ベースの少額入金の場合は 10 回、金額ベースの少額入金の場合は 3 回までです。この上限を超えると、Stripe は銀行口座を確認できなくなります。また、少額入金の確認は 10 日経過するとタイムアウトになります。この期間内に少額入金を確認できなかった場合、PaymentIntent は新しい支払い方法の詳細を要求する状態に戻ります。少額入金とは何か、どのように使用されるのかを顧客に明確に伝えることで、確認に関する問題を回避できます。

オプション: カスタムのメール通知を送信する

Optionally, you can send custom email notifications to your customer. After you set up custom emails, you need to specify how the customer responds to the verification email. To do so, choose one of the following:

  • Use the Stripe-hosted verification page. To do this, use the verify_with_microdeposits[hosted_verification_url] URL in the next_action object to direct your customer to complete the verification process.

  • Stripe がオンラインで提供する確認ページを使用しない場合、ご自身のサイトにフォームを作成します。顧客はこのフォームを使用して少額入金の金額を伝え、Stripe.js を使用して、銀行口座を確認します。

    • 確認のために、少なくとも 6 桁のストリングの descriptor code パラメーターを処理するフォームを設定します。
    • また、Stripe は、フォームで amounts パラメーターを処理するように設定することもお勧めします。顧客が利用する一部の銀行で必要になる場合があるためです。

    組み込みは、descriptor_code 「または」 amounts でのみ渡されます。組み込みでどちらが使用されているかを判断するには、next_action オブジェクトの verify_with_microdeposits[microdeposit_type] の値を確認します。

stripe.verifyMicrodepositsForPayment(clientSecret, { // Provide either a descriptor_code OR amounts, not both descriptor_code: 'SMT86W', amounts: [32, 45], });

銀行口座の確認に成功すると、Stripe は PaymentIntent オブジェクトを processing の status で返し、payment_intent.processing Webhook イベントを送信します。

確認が失敗する原因はいくつか存在します。失敗は直接的なエラー応答で同期的に発生することも、payment_intent.payment_failed Webhook イベントを通じて非同期で発生することもあります (以下の例を参照してください)。

{ "error": { "code": "payment_method_microdeposit_verification_amounts_mismatch", "message": "The amounts provided do not match the amounts that were sent to the bank account. You have {attempts_remaining} verification attempts remaining.", "type": "invalid_request_error" } }
エラーコード同期または非同期メッセージステータスの変化
payment_method_microdeposit_failed同期、または Webhook イベントを通じて非同期で発生少額入金に失敗しました。指定した銀行口座、金融機関、支店の番号を確認してくださいstatus は requires_payment_method で、last_payment_error が設定されます。
payment_method_microdeposit_verification_amounts_mismatch同期指定された金額が銀行口座に送金された金額と一致しません。確認試行の残り回数は {attempts_remaining} 回です。変化なし
payment_method_microdeposit_verification_attempts_exceeded同期、または Webhook イベントを通じて非同期で発生許容された確認の試行回数を超えましたstatus は requires_payment_method で、last_payment_error が設定されます。
payment_method_microdeposit_verification_timeoutWebhook イベントを通じて非同期で発生少額入金がタイムアウトになりました。顧客は要求された 10 日の期間内に銀行口座を確認しませんでした。status は requires_payment_method で、last_payment_error が設定されます。

PaymentIntent の成功を確認する
サーバー側

ACH ダイレクトデビットは、通知遅延型の支払い方法です。このため、顧客の口座から引き落としを開始してから、決済の成功または失敗の通知を受けるまでに最大で 4 営業日かかります。

PaymentIntent を作成すると、その初期ステータスは processing となります。決済が成功すると、PaymentIntent のステータスは processing から succeeded に更新されます。

Webhook を使用して決済が成功したことを確認し、顧客に決済完了を通知することをお勧めします。Stripe ダッシュボードでイベントを表示することもできます。

PaymentIntent のステータスが更新されると、以下のイベントが送信されます。

イベント説明次のステップ
payment_intent.processing顧客の支払いは、Stripe に正常に送信されました。開始された決済の成功または失敗の結果を待ちます。
payment_intent.succeeded顧客の支払いが成功しました。購入された商品またはサービスのフルフィルメントを行います。
payment_intent.payment_failed顧客の支払いは拒否されました。これは、少額入金確認の失敗に適用されることもあります。Contact the customer through email or push notification and request another payment method. If the webhook was sent due to a failed microdeposit verification, the user needs to enter in their bank account details again and a new set of microdeposits will be deposited in their account.

組み込みをテストする

Financial Connections を使用して即時確認を行うシナリオをテストする方法をご紹介します。

Send transaction emails in a sandbox

After you collect the bank account details and accept a mandate, send the mandate confirmation and microdeposit verification emails in a sandbox.

If your domain is “example.com,” use an email format such as info+testing@example.com for testing non-card payments. You can replace “info” with a standard local term such as “support.” This format ensures emails are routed correctly.

よくある間違い

You need to activate your Stripe account before you can trigger these emails while testing.

テスト用口座番号

Stripe では、手動入力の銀行口座の組み込みが本番環境に移行する準備が整ったかどうかを確認するため、テスト用の口座番号と対応するトークンをいくつか用意しています。

口座番号トークン金融番号動作
000123456789pm_usBankAccount_success110000000支払いは成功します。
000111111113pm_usBankAccount_accountClosed110000000口座が解約済みであるため、支払いは失敗します。
000000004954pm_usBankAccount_riskLevelHighest110000000この支払いは、不正利用のリスクが高いため、Radar によってブロックされています。
000111111116pm_usBankAccount_noAccount110000000口座が見つからないため、支払いは失敗します。
000222222227pm_usBankAccount_insufficientFunds110000000残高不足のため、支払いは失敗します。
000333333335pm_usBankAccount_debitNotAuthorized110000000引き落としがオーソリされていないため、支払いは失敗します。
000444444440pm_usBankAccount_invalidCurrency110000000通貨が無効であるため、支払いは失敗します。
000666666661pm_usBankAccount_failMicrodeposits110000000支払いで少額入金の送金が失敗します。
000555555559pm_usBankAccount_dispute110000000支払いによって不審請求の申請が開始されています。
000000000009pm_usBankAccount_processing110000000支払いは無期限に処理中のままになります。これは PaymentIntent のキャンセルをテストするのに便利です。
000777777771pm_usBankAccount_weeklyLimitExceeded110000000The payment fails due to payment amount causing the account to exceed its weekly payment volume limit.

テスト取引を完了する前に、自動的に支払いに成功または失敗するテスト用のすべての口座を確認する必要があります。確認するには、下記の少額入金のテスト用の金額または明細書表記コードを使用します。

少額入金の金額と明細書表記コードをテストする

さまざまなシナリオを再現するために、これらの少額入金の金額「または」明細書表記コードの値 0.01 を使用します。

少額入金の金額明細書表記コードの値 0.01シナリオ
32 および 45SM11AAアカウントの確認をシミュレーションします。
10 および 11SM33CC許容された確認回数の超過をシミュレーションします。
40 および 41SM44DD少額入金のタイムアウトをシミュレーションします。

Test settlement behavior

Test transactions settle instantly and are added to your available test balance. This behavior differs from livemode, where transactions can take multiple days to settle in your available balance.

オプション売上処理速度の指定
サーバー側

オプション即時の確認のみ
サーバー側

オプション少額入金のみによる確認
サーバー側

オプション不審請求の申請を解決する
サーバー側

オプション支払いの参照情報

オプション顧客の振替日を設定する
サーバー側

参照情報

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