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.
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.
Installation
1
Install the Package
- Android
- iOS
- Expo
Paketet länkas automatiskt och hämtar Det inbyggda beroendet löses automatiskt, så inget annat installationssteg behövs.
com.dodopayments.api:checkout-android från Maven Central.2
Register a Callback URL Scheme
Registrera ett URL-schema så att operativsystemet dirigerar checkout-sessionens return URL tillbaka till din app.Ange samma URL på alla plattformar som checkout-sessionens
- Android (Gradle)
- iOS (Info.plist)
- Expo (both platforms)
Ange schemat som en manifest placeholder i Ersätt
android/app/build.gradle:android/app/build.gradle
"myapp" med appens schema.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
AnropaDodoCheckout.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 lyssnarenLinking 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.
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.CheckoutStatus
obligatorisk
Ett av fem värden:
succeeded: return URL innehållerstatus=succeeded(engångsbetalning) ellerstatus=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=processingeller något annatrequires_*-värde), eller så saknades parameternstatuseller kunde inte identifieras. Stäm av den på samma sätt somcancelled.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.result.status.
Anpassa utseendet
Om du vill ändra checkout-webbläsarens verktygsfält, knappar och färgschema skickar ducustomization 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.
Android — Custom Tab
Android — Custom Tab
string
Verktygsfältets bakgrundsfärg som en hexsträng:
"#RRGGBB" eller "#AARRGGBB".Navigeringsfältets färg som en hexsträng.
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.
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.iOS — SFSafariViewController
iOS — SFSafariViewController
'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.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örhttps(sökväg som börjar med/session/) påcheckout.dodopayments.comellertest.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 medsucceeded, 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.