Kanadische vorab autorisierte Lastschriftzahlungen annehmen
Erstellen Sie ein nutzerspezifisches Zahlungsformular für die Verwendung mit Stripe Checkout, um Zahlungen per vorab autorisierter Lastschriftzahlung in Kanada anzunehmen.
Für die Annahme vorab autorisierter kanadischer Lastschriftzahlungen auf Ihrer Website müssen ein Objekt zum Überprüfen von Zahlungen erstellt, Informationen zur Zahlungsmethode und die Mandatsbestätigung erfasst und Zahlungen zur Verarbeitung und Verifizierung des Bankkontos Ihres/Ihrer Kund/in an Stripe übermittelt werden.
Stripe verwendet dieses Zahlungsobjekt, den Payment Intent, zur Dokumentation und Verarbeitung aller Zahlungsstatus bis zum Zahlungsabschluss.
Stripe einrichtenServerseitig
Zunächst benötigen Sie ein Stripe-Konto. Registrieren Sie sich jetzt.
Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API über Ihre Anwendung:
Kund/innen erstellen oder abrufenServerseitig
Um ein Bankkonto für zukünftige Zahlungen wiederzuverwenden, muss es einem Customer-Objekt zugeordnet werden.
Sie sollten ein Customer-Objekt erstellen, wenn Ihre Kund/innen ein Konto bei Ihrem Unternehmen anlegen. Wenn Sie die ID des Customer-Objekts mit Ihrer eigenen Darstellung einer Kundin/eines Kunden verknüpfen, können Sie später die gespeicherten Angaben zur Zahlungsmethode abrufen und verwenden.
Legen Sie neue Kund/innen an oder rufen Sie bestehende Kund/innen ab, um sie mit dieser Zahlung zu verknüpfen. Fügen Sie den folgenden Code auf Ihrem Server ein, um neue Kund/innen zu erstellen.
PaymentIntent erstellenServerseitig
Ein PaymentIntent ist ein Objekt, das Ihre Absicht darstellt, eine Zahlung von einer Kundin/einem Kunden einzuziehen, und das den Lebenszyklus des Zahlungsvorgangs in jeder Phase verfolgt.
Um vorab autorisierte Lastschriftzahlungen in Kanada verwenden zu können, müssen Sie mithilfe einer vorab autorisierten Lastschriftvereinbarung (siehe PAD-Mandate) die Zustimmung Ihrer Kundin/Ihres Kunden für einmalige und wiederkehrende Lastschriften einholen. Das Mandate-Objekt zeichnet diese Vereinbarung und Autorisierung auf.
Erstellen Sie zunächst einen PaymentIntent auf Ihrem Server und geben Sie den einzuziehenden Betrag und die Währung (in der Regel cad
) an. Falls Sie bereits über eine Integration verfügen, die die Payment Intents API verwendet, fügen Sie der Liste der Zahlungsmethoden für Ihren PaymentIntent die Zahlungsmethode acss_
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.
Um einen Zahlungsplan und eine Verifizierungsmethode im Mandat für diesen PaymentIntent zu definieren, fügen Sie noch die nachfolgenden Parameter hinzu:
Parameter | Wert | Erforderlich? |
---|---|---|
payment_ | Der Zahlungsplan des Mandats. Folgende Werte werden unterstützt: interval , sporadic oder combined . In der Übersicht PAD-Mandate können Sie die passende Intervallbeschreibung für Ihr Unternehmen wählen. | Ja |
payment_ | Textbeschreibung des Zahlungsplanintervalls. In der Übersicht PAD-Mandate können Sie die passende Intervallbeschreibung für Ihr Unternehmen erstellen. | Wenn payment_ als interval oder combined festgelegt ist |
payment_ | Die Art des zu erstellenden Mandats, entweder personal (wenn es sich bei der Kundin/dem Kunden um eine Einzelperson handelt) oder business (wenn es sich um ein Unternehmen handelt). | Ja |
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 erfassen und weitergebenClientseitig
Wenn Kundinnen/Kunden über das „Click to Pay“-Verfahren mit Canadian pre-authorized 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/v3/"></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.
Achten Sie aber auf einen vorsichtigen Umgang mit dem Client-Geheimnis, da mit ihm die Zahlung abgeschlossen werden kann. Es darf nicht protokolliert, in URLs eingebettet oder Personen außer den Kund/innen selbst zugänglich gemacht werden.
Verwenden Sie stripe.confirmAcssDebitPayment, um Bankkontodaten und Verifizierungen zu erfassen, das Mandat zu bestätigen und die Zahlung abzuschließen, wenn der/die Nutzer/in das Formular übermittelt. Die Angabe der E-Mail-Adresse der Kundinnen/Kunden und des Namens der Kontoinhaber/innen in der Eigenschaft billing_
des Parameters payment_
ist erforderlich, um eine Zahlungsmethode für vorab autorisierte Lastschriften (PAD) zu erstellen.
const form = document.getElementById('payment-form'); const accountholderName = document.getElementById('accountholder-name'); const email = document.getElementById('email'); const submitButton = document.getElementById('submit-button'); const clientSecret = submitButton.dataset.secret; form.addEventListener('submit', async (event) => { event.preventDefault(); const {paymentIntent, error} = await stripe.confirmAcssDebitPayment( clientSecret, { payment_method: { billing_details: { name: accountholderName.value, email: email.value, }, }, } ); if (error) { // Inform the customer that there was an error. console.log(error.message); } else { // Handle next step based on PaymentIntent's status. console.log("PaymentIntent ID: " + paymentIntent.id); console.log("PaymentIntent status: " + paymentIntent.status); } });
Stripe.js lädt anschließend eine modale On-Page-Nutzeroberfläche, um die Erfassung und Überprüfung der Bankkontodaten abzuwickeln, eine gehostete Mandatsvereinbarung anzuzeigen und die Autorisierung einzuholen.
Notiz
Die Ausführung von stripe.
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 | Nächster Schritt |
---|---|---|
processing | Das Bankkonto wurde sofort verifiziert oder eine Verifizierung war nicht notwendig. | Schritt 6: Erfolgreichen PaymentIntent bestätigen |
requires_ | Weitere Schritte erforderlich, um die Bankkontoverifizierung abzuschließen. | Schritt 5: Bankkonten mit Testeinzahlungen verifizieren |
Nach erfolgreicher Bestätigung des PaymentIntent muss eine Bestätigung des Mandats und der erfassten Bankkontodaten per E-Mail an Ihre Kundinnen/Kunden gesendet werden. Standardmäßig übernimmt Stripe diesen Schritt, allerdings können Sie bei Bedarf auch nutzerdefinierte Benachrichtigungen versenden.
Notiz
Beim Testen der Integration werden keine E-Mails zur Mandatsbestätigung an die E-Mail-Adresse der Kund/innen gesendet.
Wenn Kund/innen das Modal schließen, ohne den Verifizierungsablauf abzuschließen, gibt Stripe.js den folgenden Fehler zurück:
{ "error": { "type": "validation_error", "code": "incomplete_payment_details", "message": "Please provide complete payment details." } }
Bankkonten mit Testeinzahlungen verifizierenClientseitig
Nicht alle Kund/innen können das Bankkonto sofort verifizieren. Dieser Schritt wird nur ausgeführt, wenn Ihre Kundin/Ihr Kunde die Sofortverifizierung im vorherigen Schritt deaktiviert hat.
In this case, Stripe automatically sends two micro-deposits to the customer’s bank account. These deposits take 1–2 business days to appear on the customer’s online statement and have statement descriptors that include ACCTVERIFY
.
Das Ergebnis des Aufrufs der Methode stripe.
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.
Stripe benachrichtigt Ihre Kundinnen/Kunden über die E-Mail-Adresse für die Rechnungsstellung, 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.
Es besteht eine Grenze von drei fehlgeschlagenen Verifizierungsversuchen. Wenn diese Grenze überschritten wird, kann das Bankkonto nicht mehr verifiziert werden. Zusätzlich gibt es für Verifizierungen von Testeinzahlungen eine Frist von 10 Tagen. Werden Testeinzahlungen nicht innerhalb dieser Zeit verifiziert, fordert die 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 und Verifizierungsseite
Wenn Sie nutzerdefinierte Benachrichtigungen versenden möchten, müssen Sie stattdessen E-Mails an Ihre Kundinnen/Kunden senden. Dafür können Sie die URL verify_
im Objekt next_
verwenden, um Ihre Kundinnen/Kunden aufzufordern, den Verifizierungsvorgang abzuschließen.
Wenn Sie nutzerdefinierte E-Mails versenden und nicht die von Stripe gehostete Verifizierungsseite verwenden möchten, können Sie auf Ihrer Website ein Formular für Ihre Kundinnen/Kunden zur Weiterleitung dieser Beträge an Sie erstellen und das Bankkonto mit Stripe.js verifizieren.
stripe.verifyMicrodepositsForPayment(clientSecret, { 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_
.
Die Verifizierung kann aus unterschiedlichen Gründen fehlschlagen. Der Fehler kann synchron als direkte Fehlermeldung oder asynchron über das Webhook-Ereignis payment_
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 und 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 vorab autorisierten kanadischen Lastschriftzahlungen handelt es sich um eine Zahlungsmethode mit verzögerter Benachrichtigung. Das bedeutet, dass es bis zu fünf Werktage dauern kann, bis Sie nach Initiierung der Lastschrift für das Konto Ihres Kunden/Ihrer Kundin eine Mitteilung über den Erfolg oder das Fehlschlagen einer 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
aktualisiert.
Die folgenden Ereignisse werden übermittelt, wenn der PaymentIntent-Status aktualisiert wird:
Ereignis | Beschreibung | Nächster Schritt |
---|---|---|
payment_ | Die Zahlung der Kundin/des Kunden wurde erfolgreich an Stripe übermittelt. | Warten Sie, bis die initiierte Zahlung erfolgt oder fehlschlägt. |
payment_ | Die Zahlung der Kundin/des Kunden war erfolgreich. | Wickeln Sie die Bestellung der Kundin/des Kunden ab. |
payment_ | Die Zahlung der Kundin/des Kunden wurde abgelehnt. Dies kann auch bei einer fehlgeschlagenen Verifizierung der Testeinzahlung zutreffen. | Kontaktieren Sie die Kundin/den Kunden per E-Mail oder Push-Benachrichtigung und fordern Sie eine andere Zahlungsmethode an. Wenn der Webhook aufgrund einer fehlgeschlagenen Verifizierung der Testeinzahlung übermittelt wurde, müssen die Nutzer/innen ihre Bankkontodaten erneut eingeben. Danach werden neue Testeinzahlungen durchgeführt. |
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
E-Mail zur Verifizierung der Testeinzahlung erhalten
Um die E-Mail zur Verifizierung der Testeinzahlung im Testmodus zu erhalten, nachdem Sie die Bankkontodaten erfasst und ein Mandat angenommen haben, geben Sie bei der Bestätigung der Details der Zahlungsmethode im Feld payment_
eine E-Mail-Adresse im folgenden Format an: {any_
.
Testkontonummern
Stripe stellt mehrere Testnummern zur Verfügung, um sicherzustellen, dass Ihre Integration für manuell eingegebene Bankkontodaten produktionsbereit ist. Alle Testkonten, die eine Zahlung automatisch ausführen oder fehlschlagen lassen, müssen vor dem Zahlungsabschluss anhand der unten aufgeführten Testeinzahlungen überprüft werden.
Institutsnummer | Transitnummer | Kontonummer | Szenario |
---|---|---|---|
000 | 11000 | 000123456789 | Die Zahlung ist sofort nach Prüfung der Testeinzahlungen erfolgreich. |
000 | 11000 | 900123456789 | Die Zahlung ist mit einer Verzögerung von drei Minuten nach Prüfung der Testeinzahlungen erfolgreich. |
000 | 11000 | 000222222227 | Die Zahlung schlägt sofort nach Prüfung der Testeinzahlungen fehl. |
000 | 11000 | 900222222227 | Die Zahlung schlägt mit einer Verzögerung von drei Minuten nach Prüfung der Testeinzahlungen fehl. |
000 | 11000 | 000666666661 | Die Testeinzahlungen zur Verifizierung schlagen fehl. |
000 | 11000 | 000777777771 | Fails the payment due to the payment amount causing the account to exceed its weekly payment volume limit. |
000 | 11000 | 000888888881 | Fails the payment due to the payment amount exceeding the account’s transaction limit. |
Um im Testmodus erfolgreiche oder fehlgeschlagene Bankkontoverifizierungen zu imitieren, verwenden Sie die folgenden aussagekräftigen Beträge für Testeinzahlungen:
Werte für Testeinzahlungen | Szenario |
---|---|
32 und 45 | Die Verifizierung des Kontos ist erfolgreich. |
Jede andere Zahlenkombination | Die Verifizierung des Kontos schlägt fehl. |