Zahlungen mit MobilePay
So akzeptieren Sie MobilePay, eine beliebte Zahlungsmethode in Dänemark und Finnland.
MobilePay ist eine einmalige Karten-Wallet-Zahlungsmethode, die in Dänemark und Finnland verwendet wird. Sie ermöglicht Ihren Kundinnen und Kunden, Zahlungen mit der Vipps-App zu authentifizieren und zu genehmigen.
Wenn Ihre Kundin oder Ihr Kunde mit MobilePay bezahlt, führt Stripe eine Kartentransaktion mit den von MobilePay empfangenen Kartendaten durch. Die Verarbeitung der Kartentransaktion ist für Ihre Integration unsichtbar und Stripe benachrichtigt Sie sofort darüber, ob die Zahlung erfolgreich war oder fehlgeschlagen ist.
Stripe empfiehlt die Verwendung des Mobile Payment Element. Bei diesem handelt es sich um ein Zahlungsformular, über das Sie MobilePay und weitere Zahlungsmethoden mit wenig Aufwand zu Ihrer Integration hinzufügen können.
In diesem Leitfaden erfahren Sie, wie Sie MobilePay über Ihre native Mobilanwendung akzeptieren, wenn Sie Ihr eigenes benutzerdefiniertes Zahlungsformular verwenden möchten. Ihre native mobile App leitet Ihre Kundinnen und Kunden zur mobilen App von MobilePay weiter, um die Zahlung abzuschließen. Zum Abschließen des Kaufs sind keine zusätzlichen Aktionen in der mobilen App von MobilePay erforderlich.
Stripe einrichtenServerseitigClientseitig
Zunächst benötigen Sie ein Stripe-Konto. Registrieren Sie sich jetzt.
Serverseitig
Für diese Integration sind Endpoints auf Ihrem Server erforderlich, die mit der Stripe API kommunizieren können. Nutzen Sie die 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:
- For iOS, go to the ios directory and run
pod install
to ensure that you also install the required native dependencies. - 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.
PaymentIntent erstellenServerseitigClientseitig
Serverseitig
Ein PaymentIntent ist ein Objekt, das Ihre Absicht, eine Kundenzahlung einzuziehen, darstellt und den gesamten Zahlungsvorgang dokumentiert.
So erstellen und bestätigen Sie einen PaymentIntent
auf Ihrem Server:
- Geben Sie den einzuziehenden Betrag und eine unterstützte Währung an (
eur
,dkk
,sek
, ornok
). - Fügen Sie
mobilepay
zur Liste der Zahlungsmethodentypen hinzu. Vergewissern Sie sich, dass Sie MobilePay im Dashboard aktiviert haben.
Der PaymentIntent enthält ein Client-Geheimnis. Senden Sie das Client-Geheimnis an den Client, um im nächsten Schritt den PaymentIntent zu bestätigen.
Clientseitig
Fordern Sie auf dem Client einen PaymentIntent von Ihrem Server an und speichern Sie sein Client-Geheimnis:
function PaymentScreen() { const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ currency: 'dkk', }), }); const {clientSecret} = await response.json(); return clientSecret; }; const handlePayPress = async () => { // See below }; return ( <View> <Button onPress={handlePayPress} title="Pay" /> </View> ); }
Das Client-Geheimnis unterscheidet sich von Ihren API-Schlüsseln, die die Stripe API-Anfragen authentifizieren. Achten Sie auf einen vorsichtigen Umgang mit dem Client-Geheimnis, da mit ihm die Zahlungen abgeschlossen werden können. Es darf nicht protokolliert, in URLs eingebettet oder anderen Personen zugänglich gemacht werden.
Rückgabe-URL einrichten (nur für iOS)Clientseitig
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.
MobilePay-Zahlung bestätigenClientseitig
Wenn der Kunde/die Kundin die Zahlung mit MobilePay auswählt, führen Sie die Zahlung durch Aufrufen von confirmPayment durch. Dies entspricht einer Webansicht, in der die Kundinnen/Kunden die Zahlung in der MobilePay-Anwendung autorisieren können. Nachdem der Kunde/die Kundin die Zahlung autorisiert hat, wird das Promise entweder mit einem Objekt mit paymentIntent
-Feld aufgelöst oder mit einem error
-Feld, wenn bei der Zahlung ein Fehler aufgetreten ist.
import {useConfirmPayment} from '@stripe/stripe-react-native'; function PaymentScreen() { const {confirmPayment, loading} = useConfirmPayment(); const fetchPaymentIntentClientSecret = async () => { // See above }; const handlePayPress = async () => { // Fetch the client secret from the backend. const clientSecret = await fetchPaymentIntentClientSecret(); const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'MobilePay', }); if (error) { console.log('Payment confirmation error: ', error); } else if (paymentIntent) { console.log('Successfully confirmed payment: ', paymentIntent); } }; return ( <View> <Button onPress={handlePayPress} title="Pay" disabled={loading} /> </View> ); }
Ihr Kunde/Ihre Kundin hat 5 Minuten Zeit, die Zahlung in der App zu autorisieren. Wenn die zugrunde liegende Kartenzahlung fehlschlägt, kann kundenseitig eine andere Karte ausgewählt und es in der MobilePay-App erneut versucht werden.
Ereignisse nach der Zahlung verarbeiten
Stripe übermittelt ein payment_intent.succeeded-Ereignis, wenn die Zahlung abgeschlossen ist. Verwenden Sie im Dashboard einen Webhook oder eine Partnerlösung, um diese Ereignisse zu empfangen und Aktionen auszuführen (Versenden einer Bestellbestätigung per E-Mail an die Kund/innen, Erfassen des Verkaufs in einer Datenbank oder Einleiten des Versandablaufs).
Ü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.
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.
Integration testen
Erstellen Sie mit Ihren Test-API-Schlüsseln einen PaymentIntent. Nachdem Sie den PaymentIntent bestätigt haben, folgen Sie der next_
-Weiterleitungs-URL zu einer Testseite mit Optionen zur Autorisierung oder Ablehnung der Zahlung.
- Klicken Sie auf Authorize test payment, um das Szenario zu testen, bei dem die Zahlung erfolgreich ist. Der Status des PaymentIntent wechselt von
requires_
zuaction succeeded
- Klicken Sie auf Fail test payment (Testzahlung ablehnen), um das Szenario zu testen, bei dem der/die Kund/in nicht authentifiziert werden kann. Der Status des PaymentIntent wechselt von
requires_
zuaction requires_
.payment_ method
Fehlgeschlagene Zahlungen
MobilePay-Transaktionen können fehlschlagen, wenn die zugrunde liegende Kartentransaktion abgelehnt wird. Weitere Infos zu Kartenablehnungen. In diesem Fall wird die PaymentMethod getrennt und der Status des PaymentIntent wechselt automatisch zu requires_
.
Wenn der Status des PaymentIntent requires_
ist, muss Ihr Kunde/Ihre Kundin die Zahlung innerhalb von 5 Minuten authentifizieren. Wenn nach 5 Minuten keine Aktion erfolgt ist, wird die PaymentMethod getrennt und der Status des PaymentIntent wechselt automatisch zu requires_
.
Rückerstattungen und angefochtene Zahlungen
Stripe führt eine Kartentransaktion mit Standard-Card-Rails im Rahmen einer Vipps-Transaktion durch. Rückerstattungen und Zahlungsanfechtungen unterliegen den Netzwerkregeln von Visa und Mastercard.