Skip to main content
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.
iOS SDK:t öppnar Dodo Payments hosted checkout i 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 Package.swift lägger du till det här beroendet:
Package.swift
Biblioteksprodukten är 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 Info.plist:
Info.plist
Du kan också lägga till URL-typen i Xcode under Info → URL Types.Använd det här schemat i 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:).
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 bygger CheckoutResult från query-parametrarna i return URL.
result.status är en UI-ledtråd, inte ett bevis på betalning. Bekräfta varje betalning från din backend med payment.succeeded eller subscription.active webhook.
CheckoutStatus
obligatorisk
Ett av fem värden:
  • succeeded: return URL innehåller status=succeeded (engångsbetalning) eller status=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=processing eller något annat requires_*-värde), eller så saknades parametern status eller så kändes den inte igen. 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 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.
Bevilja åtkomst först när en av dessa bekräftar betalningen. Förlita dig inte enbart på result.status.

Anpassa utseendet

Om du vill ändra arkets stängningsknapp, presentationsstil och färgschema skickar du en BrowserCustomization 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.
iOS har inget alternativ för verktygsfältets färg. De underliggande 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.com eller test.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.
Efter ett kastat fel bör du också kontrollera om det finns en övergiven session. Om arket inte bekräftade att det visades behåller SDK:t sessionen i registret eftersom checkout fortfarande kan vara öppen. Undantaget är 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.
Senast ändrad 26 september 2026