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

Förenklad säkerhet

Samla in känsliga betalningsdata på ett säkert sätt och förbli PCI-kompatibel

Flera betalningsmetoder

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

Inhemsk UI

Inhemska 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 med att lägga till stöd för dessa betalningsmetoder i framtida versioner.

Installation

1

Installera SDK

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

Plattformspecifik installation

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

Klientsideinstallation

1

Hämta publicerbar nyckel

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

Ställ in betalningsleverantör

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 behöver generera API-nycklar från din Dodo Payments-instrumentpanel. Se vår guide för API-nyckelgenerering för detaljerade instruktioner.
3

Skapa betalningsverktygsfunktion

Skapa en verktygsfunktion 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;
Denna funktion förutsätter att du har en backend-API-slutpunkt som skapar betalningsintentioner och returnerar en klienthemlighet. Se till att din backend är korrekt konfigurerad för att hantera betalningsskapande. Se vår API-integrationshandledning för exempel på backend-installation.
4

Implementera betalningsskärmen

Skapa din betalningsskärm med useCheckout hook. 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 kompletta exempel med styling, felhantering och anpassningsalternativ, kolla in våra demo-repositories:

Konfigurationsalternativ

Sessionsparametrar

clientSecret
string
obligatorisk
Klienthemligheten från din betalningsintention, erhållen från engångsbetalning eller prenumerations-API.
mode
string
obligatorisk
Läget för betalningssessionen (test eller live).
configuration.appearance
object
Anpassningsalternativ för betalningsbladets utseende
configuration.appearance.themes
string
Temaläge: 'light' eller 'dark'

Anpassning av utseende

Du kan anpassa React Native Unified Checkout för att matcha din apps design genom att modifiera färger, typsnitt och mer genom utseendeparametern när du anropar initPaymentSession().

Färganpassning

Varje färgkategori bestämmer färgen på en eller flera komponenter i UI. Till exempel definierar primary färgen på Betala-knappen.
FärgkategoriAnvändning
primaryPrimär färg för Betala-knappen 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
primaryTextHeadertextfärg
secondaryTextEtiketttextfärg för inmatningsfält
componentTextInmatningstextfärg (t.ex. kortnummer, postnummer)
placeholderTextPlatshållartextfärg för inmatningsfält
iconFärg för ikoner (t.ex. stängknapp)
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);
  }
};
  • Nätverksanslutningsproblem: Säkerställ stabil internetanslutning
  • Ogiltig klienthemlighet: Verifiera att backend genererar giltiga betalningsintentioner
  • Saknade beroenden: Installera alla nödvändiga beroenden
  • Plattformspecifik installation: Slutför iOS- och Android-konfigurationssteg
  • API-fel: Kontrollera vår Felkodsreferens för detaljerad felhantering
  • Aktivera debug-loggning i utveckling
  • Kontrollera nätverksförfrågningar till din backend
  • Verifiera att API-nycklar är korrekt konfigurerade
  • Testa på både iOS- och Android-plattformar
  • Granska våra Tekniska FAQ för vanliga problem
  • Använd Test vs Live-läge på rätt sätt

Testbetalningsmetoder

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