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

Vereinfachte Sicherheit

Erfassen Sie sensible Zahlungsdaten sicher und bleiben Sie PCI-konform

Mehrere Zahlungsmethoden

Akzeptieren Sie verschiedene Zahlungsmethoden, um die globale Reichweite zu erweitern

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 Versionen hinzuzufügen.

Installation

1

SDK installieren

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

Plattformspezifische Einrichtung

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

Clientseitige Einrichtung

1

Veröffentlichten Schlüssel abrufen

Holen Sie sich Ihren veröffentlichten Schlüssel aus dem Dodo Payments-Dashboard. (Unterscheidet sich für Test- und Live-Modus) https://app.dodopayments.com/developer/others
2

Zahlungsanbieter einrichten

Wickeln Sie Ihre App mit dem DodoPaymentProvider:
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 Leitfaden zur API-Schlüsselgenerierung für detaillierte Anweisungen.
3

Zahlungsdienstprogrammfunktion erstellen

Erstellen Sie eine Dienstprogrammfunktion, 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 geht davon aus, dass Sie einen Backend-API-Endpunkt haben, der Zahlungsabsichten erstellt und ein Client-Geheimnis zurückgibt. Stellen Sie sicher, dass Ihr Backend ordnungsgemäß konfiguriert ist, um die Zahlungsabwicklung zu unterstützen. Siehe unser API-Integrations-Tutorial für Beispiele zur Backend-Einrichtung.
4

Zahlungsbildschirm implementieren

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, sehen Sie sich unsere Demo-Repositories an:

Konfigurationsoptionen

Sitzungsparameter

clientSecret
string
required
Das Client-Geheimnis aus Ihrer Zahlungsabsicht, das von der Einmalzahlung oder dem Abonnement-API erhalten wurde.
mode
string
required
Der Modus der Zahlungssitzung (Test oder Live).
configuration.appearance
object
Anpassungsoptionen für das Erscheinungsbild des Zahlungsblatts
configuration.appearance.themes
string
Themenmodus: '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 beim Aufruf von initPaymentSession() ändern.

Farbanpassung

Jede Farbgruppe bestimmt die Farbe eines oder mehrerer Komponenten in der UI. Zum Beispiel definiert primary die Farbe des Pay-Buttons.
FarbgruppeVerwendung
primaryPrimärfarbe für den Pay-Button und ausgewählte Elemente
backgroundHintergrundfarbe der Zahlungsseite
componentBackgroundHintergrundfarbe für Eingaben, Tabs und andere Komponenten
componentBorderAußenrandfarbe für Eingaben, Tabs und andere Komponenten
componentDividerInnenrandfarbe (gemeinsame Ränder) für Komponenten
primaryTextHeader-Textfarbe
secondaryTextBeschriftungstextfarbe für Eingabefelder
componentTextEingabetextfarbe (z. B. Kartennummer, Postleitzahl)
placeholderTextPlatzhaltertextfarbe für Eingabefelder
iconFarbe für Icons (z. B. Schaltfläche schließen)
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);
  }
};
  • Netzwerkverbindungsprobleme: Stellen Sie eine stabile Internetverbindung sicher
  • Ungültiges Client-Geheimnis: Überprüfen Sie, ob das Backend gültige Zahlungsabsichten generiert
  • Fehlende Peer-Abhängigkeiten: Installieren Sie alle erforderlichen Abhängigkeiten
  • Plattformspezifische Einrichtung: Schließen Sie die Konfigurationsschritte für iOS und Android ab
  • API-Fehler: Überprüfen Sie unser Fehlercodes-Referenz für detaillierte Fehlerbehandlung
  • Aktivieren Sie das Debug-Logging in der Entwicklung
  • Überprüfen Sie Netzwerk-Anfragen an Ihr Backend
  • Überprüfen Sie, ob die API-Schlüssel korrekt konfiguriert sind
  • Testen Sie auf sowohl iOS- als auch Android-Plattformen
  • Überprüfen Sie unsere Technischen FAQs für häufige 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 zu verarbeiten. Erfahren Sie mehr über unseren Testprozess und verfügbare Testumgebungen.