ACH-Lastschriftzahlungen annehmen
Erstellen Sie ein nutzerspezifisches Zahlungsformular für die Verwendung mit Stripe Checkout, um Zahlungen per ACH-Lastschrift anzunehmen.
Die Annahme von ACH-Lastschriftzahlungen auf Ihrer Website umfasst Folgendes:
- Objekt zur Zahlungsverfolgung erstellen
- Erfassen von Zahlungsmethodeninformationen mit sofortiger Verifizierung, die durch Stripe Financial Connections ermöglicht wird
- Zahlung zur weiteren Verarbeitung an Stripe übermitteln
- Bankkonto Ihres Kunden/Ihrer Kundin verifizieren
Notiz
Bei ACH Direct Debit handelt es sich um eine Zahlungsmethode mit verzögerter Benachrichtigung. Dies bedeutet, dass Gelder nicht sofort nach der Zahlung verfügbar sind. Eine Zahlung benötigt in der Regel 4 Werktage bis zum Eingang auf Ihrem Konto.
Stripe verwendet das Zahlungsobjekt, den Payment Intent, zur Dokumentation und Verarbeitung aller Zahlungsstatus bis zum Zahlungsabschluss.
Stripe einrichtenServerseitig
Zunächst benötigen Sie ein Stripe-Konto. Jetzt registrieren.
Verwenden Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung:
Kundinnen/Kunden erstellen oder abrufenEmpfohlenServerseitig
Erstellen Sie ein Kundenobjekt, wenn Ihr/e Nutzer/in ein Konto bei Ihrem Unternehmen erstellt, oder rufen Sie einen bestehenden Kunden/eine bestehende Kundin ab, der/die diesem Nutzer/dieser Nutzerin zugeordnet ist. Wenn Sie die ID des Kundenobjekts mit Ihrer eigenen Darstellung eines Kunden/einer Kundin verknüpfen, können Sie die gespeicherten Angaben zur Zahlungsmethode später abrufen und verwenden. Geben Sie eine E-Mail-Adresse an, um die Optimierung für wiederkehrende Nutzer/innen von Financial Connections zu aktivieren.
PaymentIntent erstellenServerseitig
Ein PaymentIntent ist ein Objekt, das Ihre Absicht darstellt, eine Zahlung von einer Kundin/einem Kunden einzuziehen, und das den Lebenszyklus des Zahlungsprozesses in jeder Phase verfolgt.
Erstellen Sie einen PaymentIntent auf Ihrem Server und geben Sie den einzuziehenden Betrag und die usd an. Wenn Sie bereits über eine Integration verfügen, die die Payment Intents API verwendet, fügen Sie us_ der Liste der Zahlungsmethoden-Typen für Ihren PaymentIntent hinzu. Geben Sie die ID der Kundin/des Kunden an.
Falls Sie die Zahlungsmethode künftig wiederverwenden möchten, geben Sie den Parameter setup_future_usage mit dem Wert off_ an.
Bei der Erfassung von Zahlungsinformationen für Bankkonten wird standardmäßig Financial Connections verwendet, um das Konto Ihres Kunden/Ihrer Kundin sofort zu verifizieren, mit einer Ausweichoption für die manuelle Eingabe der Kontonummer und die Verifizierung von Testeinzahlungen. In der Financial Connections-Dokumentation erfahren Sie, wie Sie Financial Connections konfigurieren und auf zusätzliche Kontodaten zugreifen, um Ihre ACH-Integration zu optimieren. Beispielsweise können Sie Financial Connections verwenden, um den Kontostand zu prüfen, bevor Sie die ACH-Zahlung veranlassen.
Notiz
Um den Zugriff auf zusätzliche Daten auszudehnen, nachdem ein/e Kund/in sein/ihr Konto authentifiziert hat, muss er/sie das Konto mit erweiterten Berechtigungen erneut verknüpfen.
Client-Geheimnis abrufen
Im PaymentIntent ist ein Client-Geheimnis enthalten, das auf dem Client verwendet wird, um Zahlungen sicher abzuschließen. Es gibt verschiedene Verfahren zum Übergeben des Client-Geheimnisses an den Client.
Angaben zur Zahlungsmethode erfassenClientseitig
Wenn Kundinnen/Kunden über das „Click to Pay“-Verfahren mit ACH Direct Debit zahlen, empfehlen wir Ihnen, Stripe.js zu verwenden, um die Zahlung an Stripe zu übermitteln. Stripe.js ist unsere grundlegende JavaScript-Bibliothek für die Erstellung von Zahlungsabläufen. Sie übernimmt automatisch komplexe Integrationsaufgaben und ermöglicht es Ihnen, Ihre Integration in Zukunft unkompliziert um andere Zahlungsmethoden zu erweitern.
Binden Sie das Stripe.js-Skript in Ihre Zahlungsseite ein, indem Sie es im head Ihrer HTML-Datei einfügen.
<head> <title>Checkout</title> <script src="https://js.stripe.com/clover/stripe.js"></script> </head>
Erstellen Sie auf Ihrer Bezahlseite eine Instanz von Stripe.js mit dem folgenden JavaScript.
// 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'
Anstatt das gesamte PaymentIntent-Objekt an den Client zu übermitteln, verwenden Sie dessen Client-Geheimnis aus dem vorherigen Schritt. Dieses unterscheidet sich von Ihren API-Schlüsseln, mit denen Anfragen der Stripe API authentifiziert werden.
Gehen Sie vorsichtig mit dem Client-Geheimnis um, da es die Zahlung abschließen kann. Protokollieren Sie es nicht, betten Sie es nicht in URLs ein und machen Sie es nur dem Kunden/der Kundin zugänglich.
Verwenden Sie stripe.collectBankAccountForPayment , um Bankkontodaten mit Financial Connections zu erfassen, eine PaymentMethod zu erstellen und diese PaymentMethod an den PaymentIntent anzuhängen. Der Parameter billing_ muss den Namen des Kontoinhabers/der Kontoinhaberin enthalten, um eine PaymentMethod für ein ACH-Lastschriftkonto zu erstellen.
// 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(); } }); });
Der Stripe Financial Connections-Authentifizierungsvogang verarbeitet die Erfassung und Überprüfung von Bankkontodaten automatisch. Wenn Ihr Kunde/Ihre Kundin den Authentifizierungsvorgang abschließt, wird die PaymentMethod automatisch an den PaymentIntent angehängt und ein Financial Connections Account wird erstellt.
Häufiger Fehler
Bankkonten, die Ihre Kundinnen/Kunden durch manuelle Eingabe und Testeinzahlungen verknüpfen, haben keinen Zugriff auf zusätzliche Bankkontodaten wie Salden, Kontoinhaberschaft und Transaktionen.
Um die beste Nutzererfahrung auf allen Geräten zu bieten, setzen Sie die minimum-scale des Darstellungsfelds für Ihre Seite mithilfe des meta-Tags des Darstellungsfelds auf 1.
<meta name="viewport" content="width=device-width, minimum-scale=1" />
OptionalAuf Daten für ein Financial Connections-Bankkonto zugreifenServerseitig
Sie können nur dann auf Financial Connections-Daten zugreifen, wenn Sie beim Erstellen Ihres/Ihrer PaymentIntent zusätzliche Datenberechtigungen anfordern.
Nachdem Ihre Kundinnen und Kunden den Authentifizierungsvorgang von Stripe Financial Connections erfolgreich abgeschlossen haben, enthält die zurückgegebene PaymentMethod us_ eine financial_connections_account-ID, die auf ein Financial Connections-Konto verweist. Verwenden Sie diese ID, um auf Kontodaten zuzugreifen.
Häufiger Fehler
Bankkonten, die Ihre Kunden/Kundinnen durch manuelle Eingabe verknüpfen, und Testeinzahlungen haben keine financial_ auf der Zahlungsmethode.
Um die Financial Connections-Konto-ID zu ermitteln, rufen Sie den PaymentIntent ab und erweitern Sie das Attribut payment_:
{ "id": "{{PAYMENT_INTENT_ID}}", "object": "payment_intent", // ... "payment_method": { "id": "{{PAYMENT_METHOD_ID}}", // ... "type": "us_bank_account" "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "TEST BANK", "financial_connections_account": "{{FINANCIAL_CONNECTIONS_ACCOUNT_ID}}", "fingerprint": "q9qchffggRjlX2tb", "last4": "6789", "routing_number": "110000000" } } // ... }
Wenn Sie sich für die balances-Berechtigung entschieden haben, empfehlen wir Ihnen, Salden zu diesem Zeitpunkt zu überprüfen, um eine ausreichende Deckung zu gewährleisten, bevor Sie eine Zahlung bestätigen.
Erfahren Sie mehr über die Verwendung zusätzlicher Kontodaten zur Optimierung Ihrer ACH-Integration mit Financial Connections.
Mandatsbestätigung einziehen und die Zahlung übermittelnClientseitig
Bevor Sie die Zahlung veranlassen können, müssen Sie eine Zahlungsautorisierung von Ihrem/Ihrer Kund/in einholen, indem Sie Mandatsbedingungen anzeigen, denen er/sie zustimmen muss.
Um die Nacha-Regeln einzuhalten, müssen Sie eine Autorisierung von Ihrem Kunden/Ihrer Kundin einholen, bevor Sie die Zahlung veranlassen können. Dies tun Sie durch Anzeigen von Mandatskonditionen, denen der Kunde/die Kundin zustimmen muss. Weitere Informationen finden Sie unter [Mandate]](/payments/ach-direct-debit#mandates).
Wenn der Kunde/die Kundin den Mandatskonditionen zustimmt, müssen Sie den PaymentIntent bestätigen. Verwenden Sie stripe.confirmUsBankAccountPayment, um die Zahlung abzuschließen, wenn der Kunde/die Kundin das Formular absendet.
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). } }); });
Notiz
Die Ausführung von stripe.confirmUsBankAccountPayment kann einige Sekunden dauern. Während dieser Zeit sollten Sie Ihr Formular deaktivieren, damit keine erneute Übermittlung erfolgen kann. Lassen Sie stattdessen ein Wartesymbol einblenden, wie beispielsweise eine Sanduhr. Tritt ein Fehler auf, lassen Sie eine Fehlermeldung für die Kundin/den Kunden anzeigen, aktivieren Sie das Formular erneut und blenden Sie das Wartesymbol aus.
Bei erfolgreicher Ausführung gibt Stripe ein PaymentIntent-Objekt mit einem der folgenden möglichen Status zurück:
| Status | Beschreibung | Ausblick |
|---|---|---|
requires_ | Weitere Schritte sind erforderlich, um die Bankkontoverifizierung abzuschließen. | Schritt 6: Bankkonten mit Testeinzahlungen verifizieren |
processing | Das Bankkonto wurde sofort verifiziert oder eine Verifizierung war nicht notwendig. | Schritt 7: Erfolgreichen PaymentIntent bestätigen |
Nach erfolgreicher Bestätigung des PaymentIntent muss eine E-Mail-Bestätigung des Mandats und der erfassten Bankkontodaten an Ihren Kunden/Ihre Kundin gesendet werden. Stripe kümmert sich standardmäßig darum, aber Sie können auch nutzerdefinierte Benachrichtigungen senden, wenn Sie dies vorziehen.
Bankkonto mit Testeinzahlungen verifizierenClientseitig
Nicht alle Kund/innen können das Bankkonto sofort verifizieren. Dieser Schritt wird nur ausgeführt, wenn Ihr/e Kund/in die Sofortverifizierung im vorherigen Schritt deaktiviert hat.
In diesen Fällen sendet Stripe eine descriptor_-Testeinzahlung und greift möglicherweise auf eine amount-Testeinzahlung zurück, falls weitere Probleme bei der Verifizierung des Bankkontos auftreten. Es dauert 1–2 Werktage, bis diese Einzahlungen auf der Online-Abrechnung des Kunden/der Kundin erscheinen
- Code der Zahlungsbeschreibung. Stripe sendet eine einzelne Mikroeinzahlung über 0,01 USD an das Bankkonto des/der Kund/in mit einem einmaligen, 6-stelligen
descriptor_, der mit SM beginnt. Ihr/e Kund/in verwendet diese Zeichenfolge, um sein/ihr Bankkonto zu verifizieren.code - Betrag: Stripe sendet zwei nicht eindeutige Testeinzahlungen an das Kundenbankkonto, wobei
ACCTVERIFYals Zahlungsbeschreibung in der Abrechnung angegeben ist. Ihre Kundin/Ihr Kunde verwendet die Einzahlungsbeträge zur Verifizierung des Bankkontos.
Das Ergebnis des Aufrufs der Methode stripe.confirmUsBankAccountPayment im vorhergehenden Schritt ist ein PaymentIntent mit dem Status requires_. Der PaymentIntent enthält das Feld next_, das einige nützliche Informationen zum Abschließen der Verifizierung enthält.
next_action: { type: "verify_with_microdeposits", verify_with_microdeposits: { arrival_date: 1647586800, hosted_verification_url: "https://payments.stripe.com/…", microdeposit_type: "descriptor_code" } }
Wenn Sie eine E-Mail-Adresse für die Rechnungsstellung angegeben haben, benachrichtigt Stripe Ihre Kundinnen und Kunden über diese E-Mail-Adresse, wann die Einzahlungen voraussichtlich eingehen werden. Die E-Mail enthält einen Link zu einer von Stripe gehosteten Verifizierungsseite, auf der sie die Beträge der Einzahlungen bestätigen und die Verifizierung abschließen können.
Achtung
Verifizierungsversuche dürfen für beschreibungsbasierte Testeinzahlungen bis zu 10 mal und für betragsbasierte bis zu 3 mal fehlschlagen. Wenn Sie dieses Limit überschreiten, können wir das Bankkonto nicht mehr verifizieren. Darüber hinaus gilt für Verifizierungen von Testeinzahlungen eine Zeitüberschreitung von 10 Tagen. Werden Testeinzahlungen nicht innerhalb dieser Zeit verifiziert, fordert der PaymentIntent wieder neue Angaben zur Zahlungsmethode an. Wenn Sie Ihren Kund/innen genau erläutern, was Testeinzahlungen sind und wie sie verwendet werden, können Sie Probleme bei der Verifizierung vermeiden.
Optional: Nutzerdefinierte E-Mails-Benachrichtigungen senden
Optional können Sie personalisierte E-Mail-Benachrichtigungen an Ihren Kunden/Ihre Kundin senden. Nachdem Sie die nutzerspezifischen E-Mails eingerichtet haben, müssen Sie angeben, wie der Kunde/die Kundin auf die Verifizierungs-E-Mail antwortet. Wählen Sie dazu eine der folgenden Optionen aus:
Verwenden Sie die von Stripe gehostete Verifizierungsseite. Verwenden Sie dazu die URL
verify_im next_action-Objekt, um Ihre Kundinnen/Kunden zum Abschluss des Verifizierungsvorgangs zu leiten.with_ microdeposits[hosted_ verification_ url] Wenn Sie die von Stripe gehostete Verifizierungsseite nicht verwenden möchten, können Sie auf Ihrer Website ein Formular für Ihre Kundinnen/Kunden zur Weiterleitung von Testeinzahlungen an Sie erstellen und das Bankkonto mit Stripe.js verifizieren.
- Richten Sie das Formular mindestens so ein, dass es den Parameter
descriptor codeverarbeitet, bei dem es sich um eine 6-stellige Zeichenfolge zu Verifizierungszwecken handelt. - Stripe empfiehlt außerdem, dass Sie Ihr Formular so einstellen, dass der Parameter
amountsverarbeitet wird, da einige der von Ihren Kund/innen verwenden Banken dies möglicherweise erfordern.
Integrationen übergeben nur den
descriptor_odercode amounts. Um festzustellen, welches Ihre Integration verwendet, prüfen Sie den Wert fürverify_imwith_ microdeposits[microdeposit_ type] next_-Objekt.action - Richten Sie das Formular mindestens so ein, dass es den Parameter
stripe.verifyMicrodepositsForPayment(clientSecret, { // Provide either a descriptor_code OR amounts, not both descriptor_code: 'SMT86W', amounts: [32, 45], });
Wenn das Bankkonto erfolgreich verifiziert wurde, gibt Stripe das PaymentIntent-Objekt mit dem status processing zurück und übermittelt das Webhook-Ereignis payment_intent.processing`.
Die Verifizierung kann aus unterschiedlichen Gründen fehlschlagen. Der Fehler kann synchron als direkte Fehlermeldung oder asynchron über das Webhook-Ereignis payment_intent.payment_failed auftreten (wie in den folgenden Beispielen dargestellt).
| Fehlercode | Synchron oder asynchron | Meldungen | Änderung des Status |
|---|---|---|---|
payment_ | Synchron oder asynchron über ein Webhook-Ereignis | Die Testeinzahlungen sind fehlgeschlagen. Bitte überprüfen Sie die Kontonummer, die Finanzinstitutsnummer und die bereitgestellte Transitnummer. | status ist requires_ und last_ ist festgelegt. |
payment_ | Synchron | Die angegebenen Beträge stimmen nicht mit den Beträgen überein, die auf das Bankkonto eingezahlt wurden. Sie haben noch {attempts_remaining} Verifizierungsversuche. | Unverändert |
payment_ | Synchron oder asynchron über ein Webhook-Ereignis | Anzahl zulässiger Verifizierungsversuche wurde überschritten | status ist requires_ und last_ ist festgelegt. |
payment_ | Asynchron über ein Webhook-Ereignis | Zeitüberschreitung bei der Testeinzahlung. Die Kundin/der Kunde hat das Bankkonto nicht innerhalb der Frist von 10 Tagen verifiziert. | status ist requires_ und last_ ist festgelegt. |
Erfolgreichen PaymentIntent bestätigenServerseitig
Bei ACH Direct Debit handelt es sich um eine Zahlungsmethode mit verzögerter Benachrichtigung. Das bedeutet, dass es bis zu vier Werktage dauern kann, bis Sie nach Initiierung einer Lastschrift für das Kundenkonto eine Mitteilung über die erfolgreiche oder fehlgeschlagene Zahlung erhalten.
Der von Ihnen erstellte PaymentIntent hat zunächst den Status processing. Wenn die Zahlung erfolgreich war, wird der PaymentIntent-Status von processing in succeeded geändert.
Wir empfehlen die Verwendung von Webhooks, um die erfolgreiche Zahlung zu bestätigen und die Kundinnen/Kunden zu informieren, dass die Zahlung abgeschlossen ist. Sie können sich Ereignisse auch im Stripe-Dashboard anzeigen lassen.
Integration testen
Erfahren Sie, wie Sie Szenarien mit sofortigen Verifizierungen mithilfe von Financial Connections testen können.
Transaktions-E-Mails in einer Sandbox senden
Nachdem Sie die Bankkontodetails erfasst und ein Mandat akzeptiert haben, senden Sie die Mandatsbestätigung und die Verifizierungs-E-Mails mit Testeinzahlungen in einer Sandbox.
Wenn Ihre Domain {domain} und Ihr Nutzername {username} ist, verwenden Sie das folgende E-Mail-Format, um E-Mails für Testtransaktionen zu senden: {username}+test_email@{domain}.
Wenn Ihre Domain beispielsweise example.com und Ihr Nutzername Info lautet, verwenden Sie zum Testen von ACH Direct Debit-Zahlungen das Format info+test_email@example.com. Dieses Format stellt sicher, dass E-Mails korrekt weitergeleitet werden. Wenn Sie das Suffix +test_email nicht angeben, senden wir die E-Mail nicht.
Häufiger Fehler
Sie müssen Ihr Stripe-Konto aktivieren, bevor Sie diese E-Mails beim Testen auslösen können.
Testkontonummern
Stripe stellt mehrere Testkontonummern und dazugehörige Token zur Verfügung, um sicherzustellen, dass Ihre Integration für Bankkonten mit manueller Eingabe für den Einsatz in einer Produktionsumgebung bereit ist.
| Kontonummer | Token | Bankleitzahl | Verhalten |
|---|---|---|---|
000123456789 | pm_ | 110000000 | Die Zahlung ist erfolgreich. |
000111111113 | pm_ | 110000000 | Die Zahlung schlägt fehl, weil das Konto geschlossen ist. |
000000004954 | pm_ | 110000000 | Die Zahlung wird von Radar aufgrund eines hohen Betrugsrisikos blockiert. |
000111111116 | pm_ | 110000000 | Die Zahlung schlägt fehl, weil kein Konto gefunden wird. |
000222222227 | pm_ | 110000000 | Die Zahlung schlägt aufgrund unzureichender Deckung fehl. |
000333333335 | pm_ | 110000000 | Die Zahlung schlägt fehl, weil die Lastschriften nicht autorisiert sind. |
000444444440 | pm_ | 110000000 | Die Zahlung schlägt aufgrund einer ungültigen Währung fehl. |
000666666661 | pm_ | 110000000 | Die Zahlung sendet keine Testeinzahlungen. |
000555555559 | pm_ | 110000000 | Die Zahlung löst eine Zahlungsanfechtung aus. |
000000000009 | pm_ | 110000000 | Die Zahlung bleibt auf unbestimmte Zeit in Bearbeitung. Dies ist hilfreich beim Testen von PaymentIntent-Stornierungen. |
000777777771 | pm_ | 110000000 | Die Zahlung schlägt aufgrund des Zahlungsbetrags fehl, wodurch das Konto sein wöchentliches Zahlungsvolumenlimit überschreitet. |
Bevor Testtransaktionen abgeschlossen werden können, müssen Sie alle Testkonten verifizieren, auf denen die Zahlung automatisch erfolgreich war oder fehlschlagen ist. Verwenden Sie dazu die nachstehenden Test-Mikroeinzahlungsbeträge oder Beschreibungscodes.
Testen von Mikroeinzahlungen und Beschreibungscodes
Um verschiedene Szenarien zu imitieren, verwenden Sie diese Mikroeinzahlungsbeträge oder 0,01 Beschreibungscodewerte.
| Testeinzahlungswerte | 0.01 Beschreibungscodewerte | Szenario |
|---|---|---|
32 und 45 | SM11AA | Simuliert die Verifizierung des Kontos. |
10 und 11 | SM33CC | Simuliert das Überschreiten der Anzahl zulässiger Verifizierungsversuche. |
40 und 41 | SM44DD | Simuliert ein Testeinzahlungs-Timeout. |
Abwicklungsverhalten testen
Testtransaktionen werden sofort abgewickelt und Ihrem verfügbaren Testguthaben hinzugefügt. Dieses Verhalten unterscheidet sich vom Live-Modus, bei dem es mehrere Tage dauern kann, bis Transaktionen Ihrem verfügbaren Guthaben gutgeschrieben werden.
OptionalNur SofortverifizierungServerseitig
Standardmäßig können Ihre Kundinnen/Kunden, die Zahlungen per US-Bankkonto tätigen, die sofortige Bankkonto-Verifizierung oder Testeinzahlungen nutzen. Sie können optional auch nur eine sofortige Verifizierung des Bankkontos verlangen, indem Sie den Parameter verification_method nutzen, wenn Sie den PaymentIntent erstellen.
Dadurch wird sichergestellt, dass Sie keine Verifizierung von Testeinzahlungen durchführen müssen. Wenn die sofortige Verifizierung jedoch fehlschlägt, lautet der Status des PaymentIntent requires_. Dies weist darauf hin, dass die sofortige Verifizierung eines Kundenbankkontos fehlgeschlagen ist.
OptionalVerifizierung ausschließlich durch TesteinzahlungServerseitig
Standardmäßig können Ihre Kundinnen/Kunden, die Zahlungen per US-Bankkonto tätigen, die sofortige Bankkonto-Verifizierung oder Testeinzahlungen nutzen. Sie können optional auch nur Testeinzahlungen verlangen, indem Sie den Parameter verification_method nutzen, wenn Sie den PaymentIntent erstellen.
Vorsicht
Wenn Sie ein individuelles Zahlungsformular verwenden, müssen Sie Ihre eigene Nutzeroberfläche erstellen, um Bankkontodaten zu erfassen. Wenn Sie Stripe-E-Mails mit Testeinzahlungen deaktivieren, müssen Sie Ihre eigene Nutzeroberfläche für Ihre Kundin/Ihren Kunden erstellen, um den Testeinzahlungscode bzw. -betrag zu bestätigen.
Sie müssen dann das Bankkonto Ihrer Kundin/Ihres Kunden mit Ihrem eigenen Formular erfassen und stripe.confirmUsBankAccountPayment mit diesen Angaben aufrufen, um den PaymentIntent abzuschließen.
var form = document.getElementById('payment-form'); var accountholderName = document.getElementById('accountholder-name'); var email = document.getElementById('email'); var accountNumber = document.getElementById('account-number'); var routingNumber = document.getElementById('routing-number'); var accountHolderType= document.getElementById('account-holder-type'); var submitButton = document.getElementById('submit-button'); var clientSecret = submitButton.dataset.secret; form.addEventListener('submit', function(event) { event.preventDefault(); stripe.confirmUsBankAccountPayment(clientSecret, { payment_method: { billing_details: { name: accountholderName.value, email: email.value, }, us_bank_account: { account_number: accountNumber.value, routing_number: routingNumber.value, account_holder_type: accountHolderType.value, // 'individual' or 'company' }, }, }) .then(({paymentIntent, error}) => { if (error) { // Inform the customer that there was an error. console.log(error.message); } else { // Handle next step based on the intent's status. console.log("PaymentIntent ID: " + paymentIntent.id); console.log("PaymentIntent status: " + paymentIntent.status); } }); });
OptionalZahlungsanfechtungen behebenServerseitig
Kundinnen/Kunden fechten eine ACH-Lastschriftahlung im Allgemeinen über ihre Bank an. Dies geschieht in der Regel bis zu 60 Kalendertage nach einer Abbuchung auf einem Privatkonto oder bis zu 2 Werktage bei einem Geschäftskonto. In seltenen Fällen können Kundinnen und Kunden die Lastschriftzahlung auch außerhalb dieser Fristen erfolgreich anfechten.
Wenn Kundinnen/Kunden eine Zahlung anfechten, sendet Stripe das Webhook-Ereignis charge.dispute.closed, und die PaymentMethod-Autorisierung wird widerrufen.
In seltenen Fällen erhält Stripe möglicherweise einen ACH-Fehler von der Bank, nachdem ein PaymentIntent in den Status succeeded gewechselt ist. In diesem Fall erstellt Stripe eine Zahlungsanfechtung mit folgendem reason:
insufficient_funds incorrect_account_ details bank_can't_ process
Stripe erhebt in diesem Fall eine Fehlergebühr.
Zukünftige Zahlungen, die diese PaymentMethod wiederverwenden, geben den folgenden Fehler zurück:
{ "error": { "message": "This PaymentIntent requires a mandate, but no existing mandate was found. Collect mandate acceptance from the customer and try again, providing acceptance data in the mandate_data parameter.", "payment_intent": { ... } "type": "invalid_request_error" } }
Dieser Fehler enthält einen PaymentIntent im Status requires_. Um mit der Zahlung fortzufahren, müssen Sie:
- Legen Sie die Zahlungsanfechtung mit dem Kunden/der Kundin bei, um sicherzustellen, dass zukünftige Zahlungen nicht angefochten werden.
- Bestätigen Sie die Autorisierung Ihres Kunden/Ihrer Kundin erneut.
Um die Autorisierung der Zahlung zu bestätigen, können Sie mit Stripe.js online eine Mandatsbestätigung von Ihrem Kunden/Ihrer Kundin einholen oder die Autorisierung mit Ihrem Kunden/Ihrer Kundin offline über die Stripe API bestätigen.
Vorsicht
Wenn ein/e Kund/in mehr als eine Zahlung von demselben Bankkonto anficht, sperrt Stripe sein/ihr Bankkonto. Wenden Sie sich an den Stripe-Support, um zusätzliche Hilfe zu erhalten.
OptionalZahlungsreferenz
Die Zahlungsreferenznummer ist ein von der Bank generierter Wert, mit dem der/die Kontoinhaber/in Gelder bei seiner/ihrer Bank finden kann. Wenn die Zahlung erfolgreich ist, gibt Stripe die Zahlungsreferenznummer im Dashboard und im Zahlungsobjekt an.
| Status der Abbuchung | Zahlungsreferenzwert |
|---|---|
| Ausstehend | Nicht verfügbar |
| Fehlgeschlagen | Nicht verfügbar |
| Erfolgreich | Verfügbar (zum Beispiel 091000015001234) |
Wenn Sie den Webhook charge. erhalten, zeigen Sie außerdem den Inhalt von payment_ an, um die payment_reference zu finden.
Das folgende Beispielereignis zeigt das Rendern einer erfolgreichen ACH-Zahlung mit einer Zahlungsreferenznummer.
{ "id": "{{EVENT_ID}}", "object": "event", // omitted some fields in the example "type": "charge.succeeded", "data": { "object": { "id": "{{PAYMENT_ID}}", "object": "charge", //... "paid": true, "payment_intent": "{{PAYMENT_INTENT_ID}}", "payment_method": "{{PAYMENT_METHOD_ID}}", "payment_method_details": { "type": "us_bank_account", "us_bank_account": { "account_holder_type": "individual", "account_type": "checking", "bank_name": "TEST BANK", "fingerprint": "Ih3foEnRvLXShyfB", "last4": "1000", "payment_reference": "091000015001234", "routing_number": "110000000" } } // ... } } }
Zeigen Sie den Inhalt der destination_ an, um die Rückerstattungsreferenz zu finden, die den erstatteten ACH-Zahlungen zugeordnet ist.
Das folgende Beispielereignis zeigt das Rendering einer erfolgreichen ACH-Rückerstattung mit einer Rückerstattungsreferenznummer. Weitere Informationen zu Rückerstattungen.
{ "id": "{{EVENT_ID}}", "object": "event", "type": "charge.refund.updated", "data": { "object": { "id": "{{REFUND_ID}}", "object": "refund", //... "payment_intent": "{{PAYMENT_INTENT_ID}}", "destination_details": { "type": "us_bank_transfer", "us_bank_transfer": { "reference": "091000015001111", "reference_status": "available" } } // ... } } }
OptionalAbbuchungsdatum für Kunde/Kundin konfigurierenServerseitig
Das Datum, an dem Stripe das Bankkonto eines Kunden/einer Kundin belastet, können Sie über das Zieldatum steuern. Das Zieldatum muss mindestens drei Tage in der Zukunft und nicht mehr als 15 Tage ab dem aktuellen Datum liegen.
Mit dem Zieldatum wird geplant, dass das Geld das Konto des Kunden/der Kundin zum Zieldatum verlässt. Sie können einen PaymentIntent, der mit einem Zieldatum erstellt wurde, bis zu drei Werktage vor dem konfigurierten Datum stornieren.
Wenn das Zieldatum eines der folgenden Kriterien erfüllt, wird die Abbuchung am nächsten verfügbaren Werktag durchgeführt:
- Das Zieldatum fällt auf ein Wochenende, einen Feiertag oder einen anderen arbeitsfreien Tag.
- Das Zieldatum liegt weniger als drei Werktage in der Zukunft.
Dieser Parameter wird auf Best-Effort-Basis ausgeführt. Es kann sein, dass die Bank jedes Kunden/jeder Kundin die Abbuchungen je nach örtlichen Feiertagen oder aus anderen Gründen zu unterschiedlichen Terminen vornimmt.