Den här sidan beskriver det officiella Dodo Payments iOS checkout SDK:t för Swift. Det öppnar Dodo Payments hosted checkout i en inbyggd webbläsarvy och returnerar ett typat resultat.
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 och returnerar ett typat CheckoutResult när kunden slutför eller lämnar checkout. Det innehåller ingen API key och ingen networking-kod, 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.
Krav: iOS 16 eller senare samt Swift 6.2 eller senare (paketet deklarerar swift-tools-version: 6.2). SDK:t har inga tredjepartsberoenden.
Installation
1
Add the Package
I Xcode går du till File → Add Package Dependencies och anger paketets URL:Välj version 1.1.0 eller senare. Appearance customization kräver 1.1.0.Om du i stället vill lägga till paketet i Biblioteksprodukten är
Package.swift lägger du till det här beroendet:Package.swift
DodoCheckout.2
Register a Callback URL Scheme
Registrera ett URL-schema så att iOS dirigerar checkoutens return URL tillbaka till din app. Lägg till en URL-typ i din Du kan också lägga till URL-typen i Xcode under Info → URL Types.Använd det här schemat i
Info.plist:Info.plist
returnUrl som du skickar till SDK:t, till exempel myapp://checkout/return, och ange samma URL som checkout-sessionens return_url när din backend skapar sessionen. SDK:t matchar return URL utifrån schema, host och path. URL:en behöver inte läsa in en riktig sida.Användning
DodoCheckout.start är en async-funktion som körs på main actor. Skicka checkoutUrl som en URL byggd från checkout_url som din backend returnerar:
onEvent tar emot händelserna .opened, .returnReceived och .closed. Deras name-värden är checkout.opened, checkout.return_received och checkout.closed. Använd händelser endast för loggning, aldrig för att avgöra resultatet.
Vidarebefordra return URL
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 DodoCheckout.handleOpenURL(_:). I en app utan scenes anropar du den från app delegate:s application(_:open:options:).
- SwiftUI
- SceneDelegate
Du kan vidarebefordra varje URL.
handleOpenURL agerar endast på en URL som matchar returnUrl för den checkout som pågår och returnerar true för den. För alla andra URL:er returnerar den false, så hantera den URL:en själv.Vad resultatet betyder
SDK:t byggerCheckoutResult från query-parametrarna i return URL.
CheckoutStatus
obligatorisk
Ett av fem värden:
succeeded: return URL innehållerstatus=succeeded(engångsbetalning) ellerstatus=active(prenumeration).failed: betalningen nekades (status=failed).cancelled: kunden stängde arket 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 slutförs senare (status=processingeller något annatrequires_*-värde), eller så saknades parameternstatuseller så kändes den inte igen. 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 bevilja åtkomst. Se Verify the Payment.String?
Query-parametern
subscription_id. Ange den för subscription-checkouts.[String]?
Query-parametern
license_key. Ange den när checkout innehåller produkter med license key.String?
Query-parametern
email. Ange den när checkout samlar in en e-postadress.[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 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 arkets stängningsknapp, presentationsstil och färgschema skickar du enBrowserCustomization som customization till start(...). Alla fält är valfria. För ett nil-fält anger SDK:t inte det alternativet och iOS använder sitt eget standardvärde. Undantaget är presentationStyle, där nil betyder pageSheet.
DismissButtonStyle?
Stil för stängningsknappen:
done, close eller cancel. iOS avgör om den visas som en etikett eller ikon.PresentationStyle?
pageSheet (standardvärdet) visar ett kort som kunden kan svepa nedåt för att stänga. fullScreen täcker hela skärmen och har ingen stängningsgest.Bool?
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.ColorScheme?
light eller dark tvingar fram det utseendet oavsett enhetens systeminställning. system följer systeminställningen. Det här alternativet påverkar endast de inbyggda kontrollerna runt sidan. Checkout-sidans eget ljusa eller mörka läge kommer från customization.theme i checkout-sessionen, och dess färger kommer från customization.theme_config.SFSafariViewController-tint-egenskaperna är föråldrade från och med iOS 26.
Fel
start kastar 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 ett kastat fel.
invalidCheckoutUrl(INVALID_CHECKOUT_URL):checkoutUrlär inte en giltig checkout-session-URL (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, till exempel att det inte finns någon view controller att presentera från.
alreadyInProgress: en post du hittar då tillhör checkouten som fortfarande körs.
Övergivna sessioner
SDK:t registrerar checkout-sessionen när checkout visas och rensar endast posten när checkout avslutas med
succeeded, failed eller expired. Posten finns kvar om appen avslutas med tvång under checkout och efter ett resultat av typen cancelled eller pending. Kontrollera om den finns vid nästa start och efter varje resultat av typen cancelled eller pending.abandoned.sessionId är checkout-sessionens ID, som börjar med cks_. abandoned.createdAt är Date som 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 slutgiltig status ska du behandla den som väntande, inte misslyckad.
Relaterat
Mobile Integration Guide
Samma kontrakt för Android, React Native och Flutter.
React Native SDK
Omsluter samma Swift-kärna på iOS.