Künftige SEPA-Lastschriftzahlungen mit iDEAL einrichten
Erfahren Sie, wie Sie Bankdaten aus einer iDEAL-Zahlung speichern und wie Ihre Kund/innen spätere Zahlungen per SEPA-Lastschrift vornehmen können.
Vorsicht
Wir empfehlen Ihnen, den Leitfaden Künftige Zahlungen einrichten zu befolgen. Wenn Sie Elements bereits integriert haben, lesen Sie den Migrationsleitfaden für Payment Element.
iDEAL ist eine Zahlungsmethode für die einmalige Verwendung, bei der Kundinnen/Kunden jede Zahlung authentifizieren müssen. Bei dieser Integration berechnet Stripe Ihren Kundinnen/Kunden 0,01 EUR per iDEAL, um deren Bankdaten zu erfassen. Nachdem Ihre Kundin/Ihr Kunde die Zahlung autorisiert hat, erstattet Stripe die Zahlung und speichert die IBAN in der Zahlungsmethode SEPA-Lastschriftverfahren. Sie können dann die PaymentMethod der SEPA-Lastschrift verwenden, um Zahlungen anzunehmen oder ein Abonnement einzurichten.
Vorsicht
Um iDEAL für die Einrichtung von SEPA-Lastschriftzahlungen zu verwenden, müssen Sie die SEPA-Lastschrift im Dashboard aktivieren. Außerdem gelten die Nutzungsbedingungen für iDEAL und unsere Nutzungsbedingungen für SEPA-Lastschrift.
Für die Einrichtung künftiger SEPA-Lastschriftzahlungen mit iDEAL in Ihrer App müssen ein SetupIntent zum Überprüfen des Vorgangs erstellt, die Mandatsbestätigung erfasst und die Kundin/der Kunde zu iDEAL weitergeleitet werden. Stripe verwendet den SetupIntent zur Nachverfolgung und Verarbeitung aller Einrichtungszustände, bis die Einrichtung abgeschlossen ist.
Stripe einrichtenServerseitigClientseitig
Serverseitig
Diese Integration erfordert Endpoints auf Ihrem Server, die mit der Stripe-API kommunizieren können. Nutzen Sie unsere offiziellen Bibliotheken für den Zugriff auf die Stripe-API von Ihrem Server aus:
Clientseitig
Das React Native SDK ist Open Source und vollständig dokumentiert. Intern werden native iOS und Android SDKs verwendet. Um das React Native SDK von Stripe zu installieren, führen Sie einen der folgenden Befehle im Verzeichnis Ihres Projekts aus (je nachdem, welchen Paket-Manager Sie verwenden):
Installieren Sie als Nächstes einige weitere erforderliche Abhängigkeiten:
- Für iOS wechseln Sie in das Verzeichnis ios und führen Sie
pod install
aus, um sicherzustellen, dass Sie auch die erforderlichen nativen Dependencies installiert haben. - Für Android müssen keine Abhängigkeiten mehr installiert werden.
Notiz
Wir empfehlen Ihnen, die offizielle Anleitung zu TypeScript zu befolgen, um TypeScript zu unterstützen.
Stripe Initialisierung
Um Stripe in Ihrer React Native-App zu initialisieren, umschließen Sie entweder Ihren Zahlungsbildschirm mit der Komponente StripeProvider
oder verwenden Sie die Initialisierungsmethode initStripe
. Nur der veröffentlichbare API-Schlüssel in publishableKey
ist erforderlich. Das folgende Beispiel zeigt, wie Stripe mithilfe der Komponente StripeProvider
initialisiert wird.
import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }
Notiz
Verwenden Sie Ihre API-Testschlüssel beim Testen und Entwickeln Ihrer App und Ihre Live-Modus-Schlüssel beim Veröffentlichen Ihrer App.
Kunde/Kundin erstellenServerseitig
Erstellen Sie Kund/innen, wenn diese ein Konto bei Ihrem Unternehmen anlegen, und verknüpfen Sie sie mit Ihrer internen Darstellung ihres Kontos. So können Sie zu einem späteren Zeitpunkt die gespeicherten Details zur Zahlungsmethode abrufen und verwenden.
SetupIntent erstellenServerseitig
Erstellen Sie einen SetupIntent
mit der Kunden-ID und legen Sie payment_method_types auf ideal
fest. Der SetupIntent
verfolgt die Schritte des Einrichtungsvorgangs. Bei iDEAL beinhaltet dies das Erfassen eines SEPA-Lastschriftmandats von den Kundinnen/Kunden und die Nachverfolgung seiner Gültigkeit.
Angaben zur Zahlungsmethode und Mandatsbestätigung erfassenClientseitig
Erfassen Sie in Ihrer App den vollständigen Namen, die E-Mail-Adresse und den Namen ihrer Bank Ihrer Kundinnen/Kunden (zum Beispiel abn_
).
export default function IdealPaymentScreen() { const [name, setName] = useState(); const [bankName, setBankName] = useState(); const [email, setEmai] = useState(); const handlePayPress = async () => { // ... }; return ( <Screen> <TextInput placeholder="Email" onChange={(value) => setEmail(value.nativeEvent.text)} /> <TextInput placeholder="Name" onChange={(value) => setName(value.nativeEvent.text)} /> <TextInput placeholder="Bank name" onChange={(value) => setBankName(value.nativeEvent.text)} /> </Screen> ); }
Wenn Sie Zahlungen per SEPA-Lastschrift abwickeln möchten, müssen Ihre Kund/innen dem Lastschriftmandat zustimmen. Zeigen Sie den folgenden Standard-Autorisierungstext an, damit Ihre Kund/innen das Mandat implizit akzeptieren.
Ersetzen Sie Rocket Rides durch den Namen Ihres Unternehmens.
Beim Einrichten einer Zahlungsmethode wird das akzeptierte Mandat erstellt. Da die Kund/innen das Mandat mit der Zustimmung zu diesen Bedingungen implizit akzeptiert haben, müssen Sie diese Bedingungen in Ihrem Formular oder per E-Mail mitteilen.
Angaben zur Zahlungsmethode an Stripe sendenClientseitig
Rufen Sie das Client-Geheimnis von der erstellten SetupIntent ab und rufen Sie confirmSetupIntent
auf. Dies entspricht einer Webansicht, in der die Kund/innen die Einrichtung auf der Website oder in der App der Bank durchführen können. Anschließend wird das Promise mit dem Ergebnis der SetupIntent aufgelöst.
export default function IdealPaymentScreen() { const [name, setName] = useState(); const [bankName, setBankName] = useState(); const [email, setEmai] = useState(); const handlePayPress = async () => { const billingDetails: PaymentMethodCreateParams.BillingDetails = { name: 'Jenny Rosen', email: 'jenny.rosen@example.com', }; }; const { error, setupIntent } = await confirmSetupIntent(clientSecret, { paymentMethodType: 'Ideal', paymentMethodData: { billingDetails, bankName, } }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (setupIntent) { Alert.alert( 'Success', `Setup intent created. Intent status: ${setupIntent.status}` ); } return <Screen>{/* ... */}</Screen>; }
Zahlungsmethode SEPA-Lastschrift später belasten
Wenn Sie das Konto Ihrer Kundin/Ihres Kunden erneut belasten müssen, erstellen Sie einen neuen PaymentIntent. Suchen Sie nach der ID der SEPA-Lastschrift-Zahlungsmethode, indem Sie den SetupIntent abrufen und das Feld latest_
erweitern, in dem Sie die ID generated_
im Innern von payment_
finden.
Erstellen Sie eine PaymentIntent mit der SEPA-Lastschrift und Kunden-IDs.
Integration testen
Bestätigen Sie den SetupIntent mit Ihren Test-API-Schlüsseln. Nach der Bestätigung werden Sie an eine Testseite mit Optionen zur Autorisierung oder Ablehnung der Einrichtung der Zahlungsmethode weitergeleitet.
- Klicken Sie auf Authorize test payment (Testzahlung autorisieren), um den Fall zu testen, wenn die Einrichtung erfolgreich durchgeführt wird. Die SetupIntent wechselt von
requires_
zuaction succeeded
. - Klicken Sie auf Fail test payment (Testzahlung ablehnen), um den Fall zu testen, wenn der/die Kund/in nicht authentifiziert werden kann. Die SetupIntent wechselt von
requires_
zuaction requires_
.payment_ method
Ihre Integration von SEPA-Lastschrift testen
OptionalEreignisse nach Einrichtung verarbeiten
Nach Abschluss der SetupIntent übermittelt Stripe das Ereignis setup_intent.succeeded. Verwenden Sie das Dashboard, einen nutzerdefinierten Webhook oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen, wie das Speichern der generierten PaymentMethod SEPA-Lastschrift in Ihrer Datenbank oder die Belastung der Kundenkonten nach Ablauf des Testzeitraums, auszuführen.
Überwachen Sie diese Ereignisse, statt auf einen Callback vom Client zu warten. Auf dem Client könnte der Kunde/die Kundin das Browserfenster schließen oder die App beenden, bevor der Callback erfolgt ist und böswillige Clients könnten die Antwort manipulieren. Wenn Sie Ihre Integration so einrichten, dass asynchrone Ereignisse überwacht werden, hilft Ihnen dies auch dabei, in Zukunft mehr Zahlungsmethoden zu akzeptieren. Hier erhalten Sie Informationen zu den Unterschieden zwischen allen unterstützten Zahlungsmethoden.
Ereignisse empfangen und Geschäftsaktionen ausführen
Manuell
Im Stripe-Dashboard können Sie alle Stripe-Zahlungen anzeigen, Zahlungsbelege per E-Mail versenden, Auszahlungen abwickeln oder fehlgeschlagene Zahlungen erneut durchführen.
Benutzerdefinierter Code
Erstellen Sie einen Webhook-Handler, um Ereignisse zu überwachen und benutzerdefinierte asynchrone Zahlungsabläufe zu erstellen. Mit der Stripe-CLI können Sie Ihre Webhook-Integration lokal testen und Fehler beheben.
Vorgefertigte Apps
Verarbeiten Sie häufige Geschäftsereignisse, wie Automatisierung oder Marketing und Vertrieb durch Integration einer Partneranwendung.
OptionalUmgang mit Deep Linking
Wenn Kundinnen/Kunden Ihre App verlassen (zum Beispiel um sich in Safari oder ihrer Banking-App zu authentifizieren), bieten Sie ihnen eine Möglichkeit, automatisch zu Ihrer App zurückzukehren. Für viele Arten von Zahlungsmethoden ist eine Rückgabe-URL erforderlich. Wenn Sie keine angeben, können wir Ihren Nutzer/innen keine Zahlungsmethoden anbieten, für die eine Rückgabe-URL erforderlich ist, selbst wenn Sie diese aktiviert haben.
So geben Sie eine Rückgabe-URL an:
- Registrieren Sie eine benutzerdefinierte URL. Universelle Links werden nicht unterstützt.
- Konfigurieren Sie Ihre benutzerdefinierte URL.
- Richten Sie Ihre Root-Komponente so ein, dass sie die URL an das Stripe SDK weitergibt, wie unten gezeigt.
Notiz
Wenn Sie Expo verwenden, stellen Sie Ihr Schema in der Datei app.
ein.
import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( <View> <AwesomeAppComponent /> </View> ); }
Weitere Informationen zu nativen URL-Schemen finden Sie in der Dokumentation für Android und iOS.