Hoppa till huvudinnehåll

React Native SDK Integration

Dodo Payments React Native SDK gör det möjligt för dig att bygga säkra betalningsupplevelser i dina inhemska Android- och iOS-appar. Vår SDK erbjuder anpassningsbara UI-komponenter och skärmar för att samla in betalningsuppgifter.
  • 📦 Installera vår SDK från NPM
  • 📚 Se vårt demo-repo för kompletta implementations exempel
  • 🎥 Titta på vår demovideo för att se Dodo Payments SDK i aktion

Funktioner

Simplified Security

Samla in känslig betalningsdata säkert samtidigt som du förblir PCI-kompatibel

Multiple Payment Methods

Acceptera olika betalningsmetoder för att utöka den globala räckvidden

Native UI

Inbyggda skärmar och element för Android och iOS
För närvarande stöds inte Apple Pay, Google Pay, Cash App och UPI i React Native SDK. Vi arbetar aktivt för att lägga till stöd för dessa betalningsmetoder i framtida versioner.

Installation

1

Install the SDK

Installera Dodo Payments SDK med din föredragna pakethanterare:
npm install dodopayments-react-native-sdk
2

Platform-specific setup

Kör pod install i din iOS-mapp:
cd ios && pod install && npm run ios

Klientsideinstallation

1

Get Publishable Key

Hämta din publicerbara nyckel från Dodo Payments-instrumentpanelen. (Olika för test- och live-lägen) https://app.dodopayments.com/developer/others
2

Setup Payment Provider

Omslut din app med 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;
Du måste skapa API-nycklar från din Dodo Payments-instrumentpanel. Se vår guide för API-nyckelgenerering för detaljerade instruktioner.
3

Create payment utility function

Skapa en hjälpfunktion för att hämta betalningsparametrar från din backend-API:
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;
Den här funktionen förutsätter att du har en backend-API-endpoint som skapar betalningsavsikter och returnerar ett klientsecret. Säkerställ att din backend är korrekt konfigurerad för att hantera betalningsskapande. Se vår API-integrationsguide för exempel på backendinställningar.
4

Implement the payment screen

Skapa din betalningsskärm med hjälp av useCheckout-hooken. Här är en komplett implementation:
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 fullständiga exempel med styling, felhantering och anpassningsalternativ, kolla in våra demoförråd:

Konfigurationsalternativ

Sessionsparametrar

clientSecret
string
obligatorisk
Klientsecreten från din betalningsavsikt, hämtad från One time payment- eller abonnemangs-API:et.
mode
string
obligatorisk
Läget för betalningssessionen (test eller live).
configuration.appearance
object
Anpassningsalternativ för betalningssidan utseende
configuration.appearance.themes
string
Temaläge: 'light' eller 'dark'

Anpassning av utseende

Du kan anpassa React Native Unified Checkout så att det matchar din apps design genom att ändra färger, typsnitt och mer via appearance-parametern när du kallar initPaymentSession().

Färganpassning

Varje färgkategori bestämmer färgen för en eller flera komponenter i användargränssnittet. Till exempel definierar primary färgen för Betalknappen.
FärgkategoriAnvändning
primaryPrimär färg för Betalknappen och valda objekt
backgroundBakgrundsfärg för betalningssidan
componentBackgroundBakgrundsfärg för inmatningar, flikar och andra komponenter
componentBorderExtern kantfärg för inmatningar, flikar och andra komponenter
componentDividerIntern kantfärg (delade kanter) för komponenter
primaryTextRubriktextens färg
secondaryTextFärgen på etiketttexter för inmatningsfält
componentTextTextfärg för inmatningar (t.ex. kortnummer, postnummer)
placeholderTextFärg för platshållartext i inmatningsfält
iconFärg för ikoner (t.ex. stäng-knapp)
errorFärg för felmeddelanden och destruktiva åtgärder
Exempelkonfiguration med stöd för ljus och mörk läge:
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',
    },
  },
};

Formanpassning

Du kan anpassa kantens radie, kantens bredd och skugga som används genom hela betalningsgränssnittet:
const appearance = {
  shapes: {
    borderRadius: 10, // Border radius for input fields, tabs, and components
    borderWidth: 1,   // Border width for components
  },
};

Komponent-specifik anpassning

Du kan anpassa specifika UI-komponenter som primärknappen (Betala-knappen). Dessa inställningar har företräde framför de globala utseendeinställningarna:
const appearance = {
  primaryButton: {
    colors: {
      background: '#000000',
      text: '#ffffff',
      border: '#ff00ff',
    },
    shapes: {
      borderRadius: 10,
      borderWidth: 1.5,
    },
  },
};
För att tillämpa dessa anpassningar, inkludera dem i din betalningssessionskonfiguration:
const params: sessionParams = {
  ...paymentSheetParams,
  configuration: {
    appearance: {
      themes: isDarkMode ? 'dark' : 'light',
      ...appearance, // Include your custom appearance settings
    },
  },
};

Felhantering

Hantera olika betalningstillstånd i din kassa-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);
  }
};
  • Problem med nätverksanslutning: Säkerställ stabil internetanslutning
  • Ogiltigt klientsecret: Kontrollera att backend genererar giltiga betalningsavsikter
  • Saknade peer-beroenden: Installera alla nödvändiga beroenden
  • Plattformspecifik konfiguration: Slutför inställningsstegen för iOS och Android
  • API-fel: Kolla vår Error Codes Reference för detaljerad felhantering
  • Aktivera felsökningsloggning under utveckling
  • Granska nätverksförfrågningar till din backend
  • Verifiera att API-nycklar är korrekt konfigurerade
  • Testa på både iOS- och Android-plattformar
  • Gå igenom våra Technical FAQs för vanliga problem
  • Använd Test vs Live Mode på rätt sätt

Testbetalningsmetoder

Använd testkortnummer i utveckling för att verifiera din integration utan att genomföra riktiga betalningar. Läs mer om vår testprocess och tillgängliga testmiljöer.