Angaben zur Zahlungsmethode für künftige Zahlungen per vorab autorisierter Abbuchung in Kanada speichern
Speichern Sie die Angaben zur Zahlungsmethode für zukünftige Zahlungen per vorab autorisierter Abbuchung in Kanada.
Sie können die Setup Intents API verwenden, um Details zur Zahlungsmethode im Voraus zu erfassen, wobei der endgültige Betrag oder das Zahlungsdatum später festgelegt wird. Dies ist nützlich für Folgendes:
- Speichern von Zahlungsmethoden in einer Geldbörse, um künftige Käufe zu optimieren
- Einziehen von Zuschlägen nach Erbringung einer Dienstleistung
- Neue Testversion eines Abonnements starten
Die meisten Bankkonten in Kanada werden in kanadischen Dollar (CAD) geführt, während nur sehr wenige andere Währungen wie den US-Dollar (USD) unterstützen. PAD-Zahlungen können sowohl in CAD als auch in USD angenommen werden, wobei es zur Vermeidung von Zahlungsfehlschlägen wichtig ist, die korrekte Währung für Ihre Kund/innen zu wählen.
Im Gegensatz zu den meisten kartenbasierten Zahlungsmethoden können Sie ein CAD-Konto ggf. nicht erfolgreich in USD belasten und umgekehrt ein USD-Konto nicht in CAD belasten. In den meisten Fällen kommt es bei einem solchen Versuch noch nach bis zu fünf Werktagen zu einem verzögerten Fehlschlagen der Zahlung.
Um das zu vermeiden, sollten Sie PAD-Zahlungen möglichst in CAD einrichten, sei denn, Sie sind sicher, dass das Kundenkonto Lastschriften in USD akzeptiert.
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 zu verwenden, 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. Wenn Ihre Kund/innen noch kein Konto erstellt haben, können Sie jetzt trotzdem ein Customer-Objekt erstellen und es zu einem späteren Zeitpunkt mit Ihrer eigenen internen Darstellung des Kundenkontos verknüpfen.
Legen Sie neue Kund/innen an oder rufen Sie bestehende Kund/innen ab, um sie mit diesen Kartendaten zu verknüpfen. Fügen Sie den folgenden Code auf Ihrem Server ein, um neue Kund/innen zu erstellen.
SetupIntent erstellenServerseitig
Ein SetupIntent ist ein Objekt, mit dem Sie eine Zahlungsmethode eines Kunden/einer Kundin für zukünftige Zahlungen einrichten können. Der SetupIntent
verfolgt die Schritte dieses Einrichtungsvorgangs.
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 einen SetupIntent auf Ihrem Server. Setzen Sie dabei payment_method_types auf acss_
und geben Sie die id der Kundin/des Kunden an. Fügen Sie außerdem folgende Parameter ein, um im Mandat einen Zahlungsplan für diesen SetupIntent zu definieren.
Parameter | Wert | Erforderlich? |
---|---|---|
payment_ | Währung, die mit dieser Zahlungsmethode für zukünftige Zahlungen verwendet werden soll. Muss mit der Währung des Bankkontos der Kundin/des Kunden übereinstimmen. Akzeptierte Werte sind cad or usd . | Ja |
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 SetupIntent 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 und Mandatsbestätigung erfassenClientseitig
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.confirmAcssDebitSetup, um Bankkontodaten und Verifizierungen zu erfassen, das Mandat zu bestätigen und die Einrichtung 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 {setupIntent, error} = await stripe.confirmAcssDebitSetup( 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 SetupIntent's status. console.log("SetupIntent ID: " + setupIntent.id); console.log("SetupIntent status: " + setupIntent.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 SetupIntent-Objekt mit einem der folgenden möglichen Status zurück:
Status | Beschreibung | Nächster Schritt |
---|---|---|
succeeded | Das Bankkonto wurde sofort verifiziert oder eine Verifizierung war nicht notwendig. | Keine weiteren Schritte erforderlich |
requires_ | Weitere Schritte erforderlich, um die Bankkontoverifizierung abzuschließen. | Schritt 5: Bankkonten mit Testeinzahlungen verifizieren |
Nach erfolgreicher Bestätigung des SetupIntent 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.
ist ein SetupIntent mit dem Status requires_
. Der SetupIntent 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.verifyMicrodepositsForSetup(clientSecret, { amounts: [32, 45], });
Wenn das Bankkonto erfolgreich verifiziert wurde, gibt Stripe das SetupIntent-Objekt mit dem status
succeeded
zurück und übermittelt das Webhook-Ereignis setup_
.
Die Verifizierung kann aus unterschiedlichen Gründen fehlschlagen. Der Fehler kann synchron als direkte Fehlermeldung oder asynchron über das Webhook-Ereignis setup_
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. |
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. |