Den här sidan beskriver det officiella Dodo Payments Flutter-paketet,
dodopayments_checkout på pub.dev. Det finns även ett separat community-byggt paket. Se
Community Projects.Checkout Sessions API
Skapa
checkout_url som detta SDK öppnar från din backend.Mobile Integration Guide
Se hur detta SDK passar in i det fullständiga mobila betalningsflödet.
dodopayments_checkout öppnar Dodo Payments hosted checkout i SFSafariViewController på iOS och i en Custom Tab på Android, och returnerar en typad CheckoutResult. Det använder samma native code som de fristående iOS- och
Android-SDK:erna, och all checkout-logik finns i den native coden. Dart-lagret vidarebefordrar varje anrop via en typad
Pigeon-kanal. Paketet innehåller ingen API-nyckel och anropar aldrig Dodo Payments API.
Krav: Flutter 3.44 eller senare med Dart 3.12 eller senare, iOS 16 eller senare samt Android minSdk 23.
Installation
1
Add the Dependency
Lägg till paketet i Appearance customization kräver version 1.1.0 eller senare.Android-pluginet kompilerar som standard mot Android SDK 35. Om ett annat plugin kräver en högre
pubspec.yaml:pubspec.yaml
compileSdk anger du dodoCompileSdk i appens gradle.properties.2
Register a Callback URL Scheme
Registrera ett URL-schema så att operativsystemet dirigerar checkoutens return URL tillbaka till din app. Använd detta schema i
returnUrl som du skickar till SDK:t och ange samma URL som checkout-sessionens return_url när din backend skapar sessionen. URL:en behöver inte läsa in en riktig sida.- iOS
- Android
Lägg till en URL-typ för ditt schema i
ios/Runner/Info.plist:ios/Runner/Info.plist
SFSafariViewController kan inte fånga sin egen return URL, så iOS öppnar URL:en i din app i stället. Vidarebefordra varje inkommande URL till SDK:t, till exempel från
app_links:Du kan vidarebefordra varje URL.
handleOpenURL agerar endast på en URL som matchar returnUrl för den pågående checkouten och löser true för den. För alla
andra URL:er löser den false. På Android löser den alltid false.Användning
AnropaDodoCheckout.instance.start med checkout_url från din backend:
onEvent tar emot händelser vars type är CheckoutEventType.opened, returnReceived eller closed. Använd dem endast för loggning, aldrig för att avgöra resultatet.
Vad resultatet betyder
SDK:t byggerCheckoutResult från query-parametrarna i return URL:en.
CheckoutStatus
obligatorisk
Ett av fem värden:
succeeded: return URL:en innehållerstatus=succeeded(engångsbetalning) ellerstatus=active(prenumeration).failed: betalningen avvisades (status=failed).cancelled: kunden stängde webbläsarvyn innan return URL:en 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 slutförs senare (status=processingeller valfrittrequires_*-värde), eller så saknades parameternstatuseller kunde inte identifieras. Stäm av den på samma sätt somcancelled.expired: checkout-sessionen löpte ut (status=expired).
String?
Query-parametern
payment_id, när return URL:en 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-checkouter.List<String>?
Query-parametern
license_key. Anges när checkouten innehåller license key-produkter.String?
Query-parametern
email. Anges när checkouten samlar in en e-postadress.Map<String, String>
Varje query-parameter från return URL:en, ordagrant.
Verifiera betalningen
Webhooks
Dodo Payments anropar din backend när en betalning lyckas eller en prenumeration 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 du enBrowserCustomization som customization till CheckoutParams. Android Custom Tabs och iOS SFSafariViewController har olika native-kontroller, så alternativen är uppdelade i AndroidBrowserOptions och IosBrowserOptions. Varje plattform ignorerar den andras alternativ. Alla fält är valfria och har som standard värdet null. För ett null-fält anger SDK:t inte det alternativet och plattformen använder sitt eget standardvärde.
Android — Custom Tab
Android — Custom Tab
Color?
Bakgrundsfärg för verktygsfältet.
Färg på navigeringsfältet.
Färg på avdelaren ovanför navigeringsfältet.
CloseButtonStyle?
standard visar systemets “X”-ikon. back visar en bakåtpil som SDK:t ritar.CloseButtonPosition?
Sidan av verktygsfältet där stängningsknappen visas:
start eller end.Visar verktygsfältets delningsikon.
false döljer den.bool?
Visar sidans titel under URL:en i verktygsfältet.
bool?
Döljer verktygsfältet automatiskt när sidan rullas.
bool?
Visar “Bookmark this page” i overflow-menyn.
bool?
Visar “Download page” i overflow-menyn.
BrowserColorScheme?
light eller dark tvingar fram det utseendet oavsett enhetens systeminställning. system följer systeminställningen.iOS — SFSafariViewController
iOS — SFSafariViewController
DismissButtonStyle?
Stil för stängningsknappen:
done, close eller cancel. iOS avgör om den visas som en etikett eller ikon.PresentationStyle?
pageSheet (används när du lämnar detta null) visar ett kort som kunden kan svepa nedåt för att stänga. fullScreen täcker hela skärmen.bool?
Låter verktygsfältet fällas ihop när sidan rullas. Det har endast synlig effekt när
presentationStyle är fullScreen. Med pageSheet förblir fälten fixerade oavsett denna inställning.BrowserColorScheme?
light eller dark tvingar fram det utseendet oavsett enhetens systeminställning. system följer systeminställningen.SFSafariViewController är föråldrade från och med iOS 26.
Fel
start kastar CheckoutException endast vid felaktig användning eller ett plattformsfel. Läs orsaken från code, en CheckoutErrorCode. Den native code-strängen finns i nativeCode.
En kund som avbryter eller en avvisad betalning är alltid ett resultat, aldrig ett undantag.
invalidCheckoutUrl(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.invalidReturnUrl(INVALID_RETURN_URL):returnUrlär inte en absolut URL med ett schema och en host.alreadyInProgress(ALREADY_IN_PROGRESS): en annan checkout körs. Endast en checkout kan köras åt gången.platformError(PLATFORM_ERROR): ett oväntat plattformsfel. Okända native-fel mappas också till denna kod.
Övergivna sessioner
Det native SDK:t registrerar checkout-sessionen när checkouten startar och rensar posten endast när checkouten avslutas med
succeeded, failed eller expired. Posten
finns kvar om appen avslutas under checkouten samt efter ett cancelled- eller pending-resultat. Kontrollera om den finns vid nästa start och efter varje cancelled- eller pending-resultat.abandoned.sessionId är checkout-sessionens ID, som börjar med cks_. abandoned.createdAt är tiden då DateTime checkouten 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 React Native.
Community Projects
Det finns även ett separat community-byggt Flutter-paket.