Zum Hauptinhalt springen

React Native SDK-Integration

Das Dodo Payments React Native SDK ermöglicht es Ihnen, sichere Zahlungserlebnisse in Ihren nativen Android- und iOS-Apps zu erstellen. Unser SDK bietet anpassbare UI-Komponenten und Bildschirme zur Erfassung von Zahlungsdetails.
  • 📦 Installieren Sie unser SDK von NPM
  • 📚 Sehen Sie sich unser Demo-Repository für vollständige Implementierungsbeispiele an
  • 🎥 Sehen Sie sich unser Demo-Video an, um das Dodo Payments SDK in Aktion zu sehen

Funktionen

Simplified Security

Sammeln Sie sensible Zahlungsdaten sicher, während Sie weiterhin PCI-konform bleiben

Multiple Payment Methods

Akzeptieren Sie verschiedene Zahlungsmethoden, um Ihre globale Reichweite auszubauen

Native UI

Native Bildschirme und Elemente für Android und iOS
Derzeit werden Apple Pay, Google Pay, Cash App und UPI im React Native SDK nicht unterstützt. Wir arbeiten aktiv daran, diese Zahlungsmethoden in zukünftigen Releases zu integrieren.

Installation

1

Install the SDK

Installieren Sie das Dodo Payments SDK mit dem von Ihnen bevorzugten Paketmanager:
npm install dodopayments-react-native-sdk
2

Platform-specific setup

Führen Sie pod install in Ihrem iOS-Ordner aus:
cd ios && pod install && npm run ios

Clientseitige Einrichtung

1

Get Publishable Key

Rufen Sie Ihren veröffentlichbaren Schlüssel im Dodo Payments Dashboard ab. (Unterscheidet sich für Test- und Live-Modus) https://app.dodopayments.com/developer/others
2

Setup Payment Provider

Binden Sie Ihre App mit dem DodoPaymentProvider ein:
App.tsx
import React from 'react';
import { DodoPaymentProvider } from 'dodopayments-react-native-sdk';
import PaymentScreen from './PaymentScreen';

function App() {
  return (
    <DodoPaymentProvider publishableKey="YOUR_PUBLISHABLE_KEY">
      <PaymentScreen />
    </DodoPaymentProvider>
  );
}

export default App;
Sie müssen API-Schlüssel aus Ihrem Dodo Payments Dashboard generieren. Siehe unseren API Integration Tutorial für detaillierte Anleitungen.
3

Create payment utility function

Erstellen Sie eine Hilfsfunktion, um Zahlungsparameter von Ihrer Backend-API abzurufen:
utils/fetchPaymentParams.ts
const API_URL = 'YOUR_BACKEND_URL'; // Replace with your server URL

const fetchPaymentParams = async () => {
  const response = await fetch(`${API_URL}/create-payment`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
  });
  
  if (!response.ok) {
    throw new Error('Failed to fetch payment parameters');
  }
  
  return await response.json();
};

export default fetchPaymentParams;
Diese Funktion setzt voraus, dass Sie einen Backend-API-Endpunkt haben, der Payment Intents erstellt und ein Client-Geheimnis zurückgibt. Stellen Sie sicher, dass Ihr Backend korrekt konfiguriert ist, um Zahlungen zu erstellen. Siehe unser API Integration Tutorial für Beispiele zur Backend-Einrichtung.
4

Implement the payment screen

Erstellen Sie Ihren Zahlungsbildschirm mit dem useCheckout-Hook. Hier ist eine vollständige Implementierung:
PaymentScreen.tsx
import React from 'react';
import { View, Text, useColorScheme } from 'react-native';
import { useCheckout, type sessionParams } from 'dodopayments-react-native-sdk';
import fetchPaymentParams from './utils/fetchPaymentParams';

const PaymentScreen = () => {
  const { initPaymentSession, presentPaymentSheet } = useCheckout();
  const [error, setError] = React.useState('');
  const [message, setMessage] = React.useState('');
  const [loading, setLoading] = React.useState(false);
  const [showSuccessScreen, setShowSuccessScreen] = React.useState(false);
  const isDarkMode = useColorScheme() === 'dark';

  const processPayment = async () => {
    setLoading(true);
    setMessage('');
    setError('');

    try {
      // 1. Get payment parameters from your backend
      const key = await fetchPaymentParams();
      
      // 2. Initialize payment session
      const paymentSheetParamsResult = await initPaymentSession({
        clientSecret: key.clientSecret,
      });
      
      // 3. Configure and present payment sheet
      const params: sessionParams = {
        ...(paymentSheetParamsResult as sessionParams),
        configuration: {
          appearance: {
            themes: isDarkMode ? 'dark' : 'light',
            primaryButton: {
              colors: {
                light: {
                  background: 'green',
                  componentBorder: 'green',
                  placeholderText: 'yellow',
                },
                dark: {
                  background: 'green',
                  componentBorder: 'green',
                  placeholderText: 'yellow',
                },
              },
              shapes: {
                borderRadius: 30,
                borderWidth: 3,
              },
            },
          },
          mode: 'test', // DEFAULTS TO TEST MODE
        },
      };

      const paymentSheetResponse = await presentPaymentSheet(params);

      // 4. Handle payment result
      switch (paymentSheetResponse?.status) {
        case 'cancelled':
          setError('Payment cancelled by user.');
          break;
        case 'succeeded':
          setMessage('');
          setShowSuccessScreen(true);
          break;
        case 'failed':
          setError('Payment failed : \n' + paymentSheetResponse?.message);
          break;
        default:
          setError(paymentSheetResponse?.message);
          setMessage('');
      }
    } catch (err) {
      setError('Failed to process payment');
    } finally {
      setLoading(false);
    }
  };

  return (
    <View>
      <Button 
        onPress={processPayment}
        disabled={loading}
        title={loading ? 'Processing...' : 'Pay Now'}
      />
      {error && <Text style={{ color: 'red' }}>{error}</Text>}
      {message && <Text style={{ color: 'green' }}>{message}</Text>}
      {showSuccessScreen && (
        <PaymentSuccessScreen
          amount={total}
          onContinue={() => setShowSuccessScreen(false)}
        />
      )}
    </View>
  );
};

export default PaymentScreen;
Für vollständige Beispiele mit Styling, Fehlerbehandlung und Anpassungsoptionen schauen Sie sich unsere Demo-Repositories an:

Konfigurationsoptionen

Sitzungsparameter

clientSecret
string
erforderlich
Das Client-Geheimnis aus Ihrem Payment Intent, das über die One-Time-Payment- oder Subscription-API erhalten wurde.
mode
string
erforderlich
Der Modus der Zahlungssitzung (Test oder Live).
configuration.appearance
object
Anpassungsoptionen für das Erscheinungsbild des Zahlungsformulars
configuration.appearance.themes
string
Thema-Modus: 'light' oder 'dark'

Anpassung des Erscheinungsbilds

Sie können den React Native Unified Checkout an das Design Ihrer App anpassen, indem Sie Farben, Schriftarten und mehr über den Erscheinungsparameter ändern, wenn Sie initPaymentSession() aufrufen.

Farbanpassung

Jede Farb-kategorie bestimmt die Farbe eines oder mehrerer Komponenten in der Benutzeroberfläche. Beispielsweise definiert primary die Farbe des Bezahlen-Buttons.
FarbkategorieVerwendung
primaryPrimärfarbe für den Bezahlen-Button und ausgewählte Elemente
backgroundHintergrundfarbe der Zahlungsseite
componentBackgroundHintergrundfarbe für Eingabefelder, Tabs und andere Komponenten
componentBorderExterne Rahmenfarbe für Eingabefelder, Tabs und andere Komponenten
componentDividerInterne Rahmenfarbe (gemeinsame Rahmen) für Komponenten
primaryTextTextfarbe für Kopfzeilen
secondaryTextBeschriftungsfarbe für Eingabefelder
componentTextTextfarbe für Eingaben (z. B. Kartennummer, Postleitzahl)
placeholderTextPlatzhalterfarbe für Eingabefelder
iconFarbe für Symbole (z. B. Schließen-Button)
errorFarbe für Fehlermeldungen und destruktive Aktionen
Beispielkonfiguration mit Unterstützung für hellen und dunklen Modus:
const appearance = {
  colors: {
    light: {
      primary: '#F8F8F2',
      background: '#ffffff',
      componentBackground: '#E6DB74',
      componentBorder: '#FD971F',
      componentDivider: '#FD971F',
      primaryText: '#F8F8F2',
      secondaryText: '#75715E',
      componentText: '#AE81FF',
      placeholderText: '#E69F66',
      icon: '#F92672',
      error: '#FF0000',
    },
    dark: {
      primary: '#00ff0099',
      background: '#ff0000',
      componentBackground: '#ff0080',
      componentBorder: '#62ff08',
      componentDivider: '#d6de00',
      primaryText: '#5181fc',
      secondaryText: '#ff7b00',
      componentText: '#00ffff',
      placeholderText: '#00ffff',
      icon: '#f0f0f0',
      error: '#0f0f0f',
    },
  },
};

Formanpassung

Sie können den Randradius, die Randbreite und den Schatten, die in der gesamten Zahlungsoberfläche verwendet werden, anpassen:
const appearance = {
  shapes: {
    borderRadius: 10, // Border radius for input fields, tabs, and components
    borderWidth: 1,   // Border width for components
  },
};

Komponenten-spezifische Anpassung

Sie können spezifische UI-Komponenten wie die primäre Schaltfläche (Pay-Button) anpassen. Diese Einstellungen haben Vorrang vor den globalen Erscheinungseinstellungen:
const appearance = {
  primaryButton: {
    colors: {
      background: '#000000',
      text: '#ffffff',
      border: '#ff00ff',
    },
    shapes: {
      borderRadius: 10,
      borderWidth: 1.5,
    },
  },
};
Um diese Anpassungen anzuwenden, fügen Sie sie in Ihre Zahlungs-Sitzungskonfiguration ein:
const params: sessionParams = {
  ...paymentSheetParams,
  configuration: {
    appearance: {
      themes: isDarkMode ? 'dark' : 'light',
      ...appearance, // Include your custom appearance settings
    },
  },
};

Fehlerbehandlung

Behandeln Sie verschiedene Zahlungszustände in Ihrer Checkout-Funktion:
const handlePaymentResult = (paymentSheetResponse) => {
  switch (paymentSheetResponse?.status) {
    case 'cancelled':
      // User cancelled the payment
      console.log('Payment cancelled by user');
      break;
    case 'succeeded':
      // Payment completed successfully
      console.log('Payment succeeded');
      // Navigate to success screen or update UI
      break;
    case 'failed':
      // Payment failed
      console.log('Payment failed:', paymentSheetResponse?.message);
      // Show error message to user
      break;
    default:
      console.log('Unknown payment status:', paymentSheetResponse?.status);
  }
};
  • Probleme mit der Netzwerkverbindung: Sorgen Sie für eine stabile Internetverbindung
  • Ungültiges Client-Geheimnis: Überprüfen Sie, ob das Backend gültige Payment Intents erzeugt
  • Fehlende Peer-Abhängigkeiten: Installieren Sie alle erforderlichen Abhängigkeiten
  • Plattformspezifische Einrichtung: Führen Sie die iOS- und Android-Konfigurationsschritte vollständig durch
  • API-Fehler: Prüfen Sie unsere Fehlercode-Referenz für detaillierte Fehlerbehandlung
  • Aktivieren Sie das Debug-Logging in der Entwicklung
  • Überprüfen Sie Netzwerkaufrufe zu Ihrem Backend
  • Stellen Sie sicher, dass API-Schlüssel korrekt konfiguriert sind
  • Testen Sie sowohl auf iOS als auch auf Android
  • Lesen Sie unsere Technischen FAQs für gängige Probleme
  • Verwenden Sie Test- vs. Live-Modus angemessen

Test-Zahlungsmethoden

Verwenden Sie Testkartennummern in der Entwicklung, um Ihre Integration zu überprüfen, ohne echte Zahlungen abzuwickeln. Erfahren Sie mehr über unseren Testprozess und verfügbare Testumgebungen.