Skip to main content
यह पेज Swift के लिए official Dodo Payments iOS checkout SDK को कवर करता है। यह Dodo Payments hosted checkout को native browser view में खोलता है और typed result लौटाता है।

Checkout Sessions API

अपने backend से वह checkout_url बनाएँ जिसे यह SDK खोलता है।

Mobile Integration Guide

देखें कि यह SDK पूरे mobile payment flow में कैसे फिट होता है।
iOS SDK Dodo Payments hosted checkout को SFSafariViewController में खोलता है और customer के checkout पूरा करने या छोड़ने पर typed CheckoutResult लौटाता है। इसमें कोई API key नहीं होती और इसमें networking code भी नहीं होता, इसलिए यह कभी Dodo Payments API को कॉल नहीं करता। Checkout browser view में चलता है। SDK उस view को प्रस्तुत और dismiss करता है तथा return URL से result पढ़ता है। आवश्यकताएँ: iOS 16 या बाद का संस्करण और Swift 6.2 या बाद का संस्करण (package swift-tools-version: 6.2 घोषित करता है)। SDK की कोई third-party dependencies नहीं हैं।

इंस्टॉलेशन

1

Add the Package

Xcode में File → Add Package Dependencies पर जाएँ और package URL दर्ज करें:
संस्करण 1.1.0 या बाद का चुनें। Appearance customization के लिए 1.1.0 आवश्यक है।इसके बजाय package को Package.swift में जोड़ने के लिए यह dependency जोड़ें:
Package.swift
library product का नाम DodoCheckout है।
2

Register a Callback URL Scheme

iOS को checkout का return URL आपके ऐप पर वापस route करने देने के लिए URL scheme register करें। अपने Info.plist में URL type जोड़ें:
Info.plist
आप Xcode में Info → URL Types के अंतर्गत भी URL type जोड़ सकते हैं।इस scheme का उपयोग उस returnUrl में करें जिसे आप SDK को पास करते हैं, उदाहरण के लिए myapp://checkout/return, और backend द्वारा session बनाते समय checkout session के return_url के रूप में वही URL सेट करें। SDK return URL का मिलान scheme, host और path के आधार पर करता है। URL को किसी वास्तविक page को load करने की आवश्यकता नहीं है।

उपयोग

DodoCheckout.start एक async function है जो main actor पर चलता है। अपने backend से लौटाए गए checkout_url से बनाए गए URL के रूप में checkoutUrl पास करें:
onEvent को .opened, .returnReceived और .closed events प्राप्त होते हैं। उनके name values क्रमशः checkout.opened, checkout.return_received और checkout.closed हैं। Events का उपयोग केवल logging के लिए करें, outcome तय करने के लिए कभी नहीं।

Return URL को Forward करना

SFSafariViewController अपने return URL को स्वयं catch नहीं कर सकता, इसलिए iOS इसके बजाय URL को आपके ऐप में खोलता है। प्रत्येक incoming URL को DodoCheckout.handleOpenURL(_:) पर forward करें। बिना scenes वाले ऐप में इसे अपने app delegate के application(_:open:options:) से कॉल करें।
आप प्रत्येक URL को forward कर सकते हैं। handleOpenURL केवल उस URL पर कार्य करता है जो चल रहे checkout के returnUrl से match करता है और उसके लिए true लौटाता है। किसी अन्य URL के लिए यह false लौटाता है, इसलिए उस URL को स्वयं handle करें।

Result का अर्थ

SDK return URL के query parameters से CheckoutResult बनाता है।
result.status एक UI hint है, payment का प्रमाण नहीं। प्रत्येक payment की पुष्टि अपने backend से, payment.succeeded या subscription.active webhook के माध्यम से करें।
CheckoutStatus
आवश्यक
पाँच values में से एक:
  • succeeded: return URL में status=succeeded (one-time payment) या status=active (subscription) है।
  • failed: payment अस्वीकार कर दिया गया (status=failed)।
  • cancelled: return URL आने से पहले customer ने sheet dismiss कर दी। SDK को outcome का पता नहीं है और payment सफल हो सकता है, इसलिए failure screen न दिखाएँ। इसके बजाय abandoned session को reconcile करें।
  • pending: payment बाद में settle होता है (status=processing या कोई भी requires_* value), या status parameter missing या unrecognized था। इसे cancelled की तरह reconcile करें।
  • expired: checkout session expire हो गया (status=expired)।
String?
payment_id query parameter, जब return URL में शामिल हो। इसे UI में दिखाएँ, लेकिन access देने के लिए इसका उपयोग न करें। Verify the Payment देखें।
String?
subscription_id query parameter। Subscription checkouts के लिए set होता है।
[String]?
license_key query parameter। Checkout में license key products शामिल होने पर set होता है।
String?
email query parameter। Checkout द्वारा email address capture किए जाने पर set होता है।
[String: String]
Return URL का प्रत्येक query parameter, verbatim।

Payment सत्यापित करें

Webhooks

Payment सफल होने या subscription सक्रिय होने पर Dodo Payments आपके backend को कॉल करता है।

Get Payment Detail

इसकी स्थिति जाँचने के लिए अपनी secret key से paymentId lookup करें।
इनमें से किसी एक द्वारा payment की पुष्टि होने के बाद ही access दें। केवल result.status पर निर्भर न रहें।

Appearance Customization

Sheet के dismiss button, presentation style और color scheme को बदलने के लिए BrowserCustomization को customization के रूप में start(...) में पास करें। प्रत्येक field optional है। nil field के लिए SDK उस option को set नहीं करता और iOS अपना default लागू करता है। अपवाद presentationStyle है, जहाँ nil का अर्थ pageSheet है।
DismissButtonStyle?
Dismiss button की style: done, close या cancel। इसे label या icon के रूप में render करना है या नहीं, यह iOS तय करता है।
PresentationStyle?
pageSheet (default) एक card प्रस्तुत करता है जिसे customer swipe down करके dismiss कर सकता है। fullScreen पूरी screen को cover करता है और इसमें dismiss gesture नहीं होता।
Bool?
Page scroll होने पर toolbar को collapse होने देता है। इसका प्रभाव केवल तब दिखाई देता है जब presentationStyle, fullScreen हो। pageSheet के साथ bars इस setting की परवाह किए बिना pinned रहते हैं।
ColorScheme?
light या dark device की system setting की परवाह किए बिना उस appearance को force करता है। system system setting का पालन करता है। यह option केवल page के आसपास के native controls को theme करता है। Checkout page का अपना light या dark mode checkout session के customization.theme से आता है और इसके colors customization.theme_config से आते हैं।
iOS में toolbar color का कोई option नहीं है। अंतर्निहित SFSafariViewController tint properties iOS 26 से deprecated हैं।

Errors

start केवल misuse या platform failure के लिए CheckoutError throw करता है। कारण error.code से पढ़ें। Customer द्वारा cancel करना या payment का decline होना हमेशा result होता है, thrown error नहीं।
  • invalidCheckoutUrl (INVALID_CHECKOUT_URL): checkoutUrl, checkout.dodopayments.com या test.checkout.dodopayments.com पर /session/ से शुरू होने वाला valid checkout session URL नहीं है।
  • invalidReturnUrl (INVALID_RETURN_URL): returnUrl scheme और host वाला absolute URL नहीं है।
  • alreadyInProgress (ALREADY_IN_PROGRESS): एक अन्य checkout चल रहा है। एक समय में केवल एक checkout चल सकता है।
  • platformError (PLATFORM_ERROR): unexpected platform failure, जैसे प्रस्तुत करने के लिए कोई view controller उपलब्ध न होना।
Thrown error के बाद abandoned session भी जाँचें। यदि sheet ने यह confirm नहीं किया कि वह दिखाई दी, तो SDK session को record में रखता है क्योंकि checkout अभी भी खुला हो सकता है। अपवाद alreadyInProgress है: उस स्थिति में मिलने वाला record अभी चल रहे checkout का होता है।

Abandoned Sessions

Checkout प्रस्तुत करते समय SDK checkout session को record करता है और केवल तब record clear करता है जब checkout succeeded, failed या expired के साथ समाप्त होता है। Checkout के दौरान ऐप बंद कर दिए जाने पर और cancelled या pending result के बाद record बना रहता है। अगले launch पर और प्रत्येक cancelled या pending result के बाद इसे जाँचें।
abandoned.sessionId checkout session ID है, जो cks_ से शुरू होती है। abandoned.createdAt वह Date है जहाँ checkout शुरू हुआ था। आपका backend Get Checkout Session के माध्यम से session lookup कर सकता है, जो उसका payment_id और payment_status लौटाता है। जब तक payment final status तक नहीं पहुँचता, इसे failed नहीं बल्कि pending मानें।

संबंधित

Mobile Integration Guide

Android, React Native और Flutter के लिए यही contract।

React Native SDK

iOS पर इसी Swift core को wrap करता है।
अंतिम संशोधन 26 सितंबर 2026