Skip to main content
Den här sidan beskriver det officiella Dodo Payments React Native checkout-SDK:t, @dodopayments/react-native-checkout. Det öppnar Dodo Payments hosted checkout i en inbyggd webbläsarvy och returnerar ett typat resultat. Ett äldre paket, dodopayments-react-native-sdk (utan scope), har ett annat API. Den här sidan dokumenterar endast paketet med scope.

Checkout Sessions API

Skapa checkout_url som det här SDK:t öppnar, från din backend.

Mobile Integration Guide

Se hur det här SDK:t passar in i det fullständiga mobila betalningsflödet.
React Native SDK:t är en Turbo Module som omsluter de inbyggda checkout-SDK:erna för iOS och Android. Det öppnar SFSafariViewController på iOS och en Custom Tab på Android. Det innehåller ingen API key och har ingen egen checkout-logik, så det anropar aldrig Dodo Payments API. Checkout körs i webbläsarvyn. SDK:t visar och stänger den vyn och läser resultatet från return URL.
Det här SDK:t stöder endast New Architecture. Det kräver React Native 0.77 eller senare, iOS 16 eller senare och Android minSdk 24. Din Android-app måste byggas med compileSdk 34 eller senare.

Installation

1

Install the Package

Paketet länkas automatiskt och hämtar com.dodopayments.api:checkout-android från Maven Central.
Det inbyggda beroendet löses automatiskt, så inget annat installationssteg behövs.
Appearance customization kräver version 1.2.0 eller senare.
2

Register a Callback URL Scheme

Registrera ett URL-schema så att operativsystemet dirigerar checkout-sessionens return URL tillbaka till din app.
Ange schemat som en manifest placeholder i android/app/build.gradle:
android/app/build.gradle
Ersätt "myapp" med appens schema.
Ange samma URL på alla plattformar som checkout-sessionens return_url när din backend skapar sessionen. SDK:t matchar return URL efter schema, host och path. URL:en behöver inte läsa in en riktig sida.

Användning

Anropa DodoCheckout.start med checkout_url från din backend:
onEvent tar emot händelser med en type av checkout.opened, checkout.return_received eller checkout.closed. Använd dem endast för loggning, aldrig för att avgöra resultatet.

Vidarebefordra Return URL

iOS behöver lyssnaren Linking för att hantera return URL, eftersom SFSafariViewController inte kan fånga sin egen return URL. På Android gör handleOpenURL ingenting och löser false, eftersom Android SDK fångar sin redirect inbyggt. Du kan registrera lyssnaren på båda plattformarna.
På iOS löser handleOpenURL true när URL:en tillhör den checkout som pågår, och false för alla andra URL:er.

Vad resultatet betyder

SDK:t bygger resultatet från query-parametrarna i return URL.
result.status är en UI-hint, inte ett bevis på betalning. Bekräfta varje betalning från din backend med webhooken payment.succeeded eller subscription.active.
CheckoutStatus
obligatorisk
Ett av fem värden:
  • succeeded: return URL innehåller status=succeeded (engångsbetalning) eller status=active (subscription).
  • failed: betalningen nekades (status=failed).
  • cancelled: kunden stängde webbläsarvyn innan return URL anlände. SDK:t känner inte till resultatet och betalningen kan ha lyckats, så visa inte en felsida. Stäm i stället av den övergivna sessionen.
  • pending: betalningen genomförs senare (status=processing eller något annat requires_*-värde), eller så saknades parametern status eller kunde inte identifieras. Stäm av den på samma sätt som cancelled.
  • expired: checkout-sessionen har löpt ut (status=expired).
string
Query-parametern payment_id när return URL innehåller en sådan. Visa den i ditt UI, men använd den inte för att ge åtkomst. Se Verify the Payment.
string
Query-parametern subscription_id. Anges för subscription-checkouts.
string[]
Query-parametern license_key. Anges när checkout innehåller produkter med license keys.
string
Query-parametern email. Anges när checkout samlar in en e-postadress.
Record<string, string>
Varje query-parameter från return URL, ordagrant.

Verifiera betalningen

Webhooks

Dodo Payments anropar din backend när en betalning lyckas eller en subscription aktiveras.

Get Payment Detail

Slå upp paymentId med din secret key för att kontrollera dess status.
Ge åtkomst först efter att en av dessa bekräftar betalningen. Förlita dig inte enbart på result.status.

Anpassa utseendet

Om du vill ändra checkout-webbläsarens verktygsfält, knappar och färgschema skickar du customization till start(...). Android Custom Tabs och iOS SFSafariViewController exponerar olika inbyggda kontroller, så alternativen är grupperade i ett android-objekt och ett ios-objekt. Varje plattform läser endast sitt eget objekt. Alla fält är valfria. Om du utelämnar ett fält använder plattformen sitt eget standardvärde.
string
Verktygsfältets bakgrundsfärg som en hexsträng: "#RRGGBB" eller "#AARRGGBB".
string
Navigeringsfältets färg som en hexsträng.
string
Färgen på avdelaren ovanför navigeringsfältet som en hexsträng.
'default' | 'back'
default visar systemets “X”-ikon. back visar en bakåtpil som SDK:t ritar.
'start' | 'end'
Sidan av verktygsfältet där stängningsknappen visas.
boolean
Visar verktygsfältets delningsikon. false döljer den.
boolean
Visar sidans titel under URL:en i verktygsfältet.
boolean
Döljer verktygsfältet automatiskt när sidan rullas.
boolean
Visar “Bookmark this page” i menyn med fler alternativ.
boolean
Visar “Download page” i menyn med fler alternativ.
'system' | 'light' | 'dark'
light eller dark tvingar fram det utseendet oavsett enhetens systeminställning. system följer systeminställningen.
'done' | 'close' | 'cancel'
Stängningsknappens stil. iOS avgör om den återges som en etikett eller en ikon.
'pageSheet' | 'fullScreen'
pageSheet (standardvärdet) visar ett kort som kunden kan svepa ned för att stänga. fullScreen täcker hela skärmen.
boolean
Låter verktygsfältet fällas ihop när sidan rullas. Det har endast effekt när presentationStyle är fullScreen. Med pageSheet förblir fälten fixerade oavsett den här inställningen.
'system' | 'light' | 'dark'
light eller dark tvingar fram det utseendet oavsett enhetens systeminställning. system följer systeminställningen.
iOS har inget alternativ för verktygsfältets färg, eftersom de underliggande SFSafariViewController-tintegenskaperna är föråldrade från och med iOS 26.

Fel

start avvisas med en CheckoutError endast vid felaktig användning eller ett plattformsfel. Läs orsaken från error.code. En kund som avbryter eller en nekad betalning är alltid ett resultat, aldrig en avvisning.
  • INVALID_CHECKOUT_URL: checkoutUrl är inte en checkout-session-URL för https (sökväg som börjar med /session/) på checkout.dodopayments.com eller test.checkout.dodopayments.com.
  • INVALID_RETURN_URL: returnUrl är inte en absolut URL med ett schema och en host.
  • ALREADY_IN_PROGRESS: en annan checkout körs. Endast en checkout kan köras åt gången.
  • PLATFORM_ERROR: ett oväntat plattformsfel. SDK:t rapporterar även alla okända inbyggda fel med den här koden.

Övergivna sessioner

Det inbyggda SDK:t registrerar checkout-sessionen när checkout startar och rensar posten endast när checkout avslutas med succeeded, failed eller expired. Posten finns kvar när appen eller JavaScript-paketet avslutas under checkout, vilket gör att löftet start förloras, samt efter ett resultat med cancelled eller pending. Kontrollera detta vid nästa mount och efter varje resultat med cancelled eller pending:
abandoned.sessionId är checkout-sessionens ID, som börjar med cks_. abandoned.createdAt är tidpunkten då checkout Date startade. Din backend kan slå upp sessionen med Get Checkout Session, som returnerar dess payment_id och payment_status. Tills betalningen når en slutlig status ska du behandla den som väntande, inte som misslyckad.

Relaterat

Mobile Integration Guide

Samma kontrakt för Android, iOS och Flutter.

Expo Boilerplate

Ett komplett Expo-exempel med checkout-integration.
Senast ändrad 26 september 2026