Skip to main content
यह पृष्ठ pub.dev पर उपलब्ध आधिकारिक Dodo Payments Flutter package, dodopayments_checkout, को कवर करता है। समुदाय द्वारा बनाया गया एक अलग package भी उपलब्ध है। Community Projects देखें।

Checkout Sessions API

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

Mobile Integration Guide

देखें कि यह SDK पूरे mobile payment flow में कैसे शामिल होता है।
dodopayments_checkout iOS पर SFSafariViewController और Android पर Custom Tab में Dodo Payments hosted checkout खोलता है, और typed CheckoutResult लौटाता है। यह standalone iOS और Android SDKs के समान native code का उपयोग करता है और checkout logic पूरी तरह उसी native code में रहता है। Dart layer प्रत्येक call को typed Pigeon channel के माध्यम से भेजती है। यह package कोई API key नहीं रखता और कभी भी Dodo Payments API को call नहीं करता। आवश्यकताएँ: Dart 3.12 या बाद के साथ Flutter 3.44 या बाद का version, iOS 16 या बाद का version, और Android minSdk 23।

Installation

1

Add the Dependency

package को pubspec.yaml में जोड़ें:
pubspec.yaml
Appearance customization के लिए version 1.1.0 या बाद का version आवश्यक है।Android plugin डिफ़ॉल्ट रूप से Android SDK 35 के विरुद्ध compile होता है। यदि किसी अन्य plugin को अधिक उच्च compileSdk की आवश्यकता हो, तो अपने app के gradle.properties में dodoCompileSdk सेट करें।
2

Register a Callback URL Scheme

एक URL scheme register करें ताकि operating system checkout के return URL को आपके app में वापस route कर सके। इस scheme का उपयोग उस returnUrl में करें जिसे आप SDK को देते हैं, और backend द्वारा session बनाते समय checkout session के return_url के रूप में वही URL सेट करें। इस URL को किसी वास्तविक page को load करने की आवश्यकता नहीं है।
अपने scheme के लिए ios/Runner/Info.plist में एक URL type जोड़ें:
ios/Runner/Info.plist
SFSafariViewController अपने return URL को स्वयं catch नहीं कर सकता, इसलिए iOS इसके बजाय URL को आपके app में खोलता है। आने वाले प्रत्येक URL को SDK को forward करें, उदाहरण के लिए app_links से:
आप प्रत्येक URL को forward कर सकते हैं। handleOpenURL केवल उसी URL पर कार्य करता है जो चल रहे checkout के returnUrl से match करता है और उसके लिए true resolve करता है। किसी भी अन्य URL के लिए यह false resolve करता है। Android पर यह हमेशा false resolve करता है।

उपयोग

अपने backend से प्राप्त checkout_url के साथ DodoCheckout.instance.start को call करें:
onEvent उन events को प्राप्त करता है जिनका type CheckoutEventType.opened, returnReceived या closed होता है। इनका उपयोग केवल logging के लिए करें, outcome तय करने के लिए कभी नहीं।

Result का अर्थ

SDK return URL के query parameters से CheckoutResult बनाता है।
result.status एक UI hint है, payment का प्रमाण नहीं। प्रत्येक payment की पुष्टि अपने backend से, payment.succeeded या subscription.active webhook के माध्यम से करें।
CheckoutStatus
आवश्यक
पाँच में से एक value:
  • succeeded: return URL में status=succeeded (one-time payment) या status=active (subscription) है।
  • failed: payment अस्वीकार कर दिया गया (status=failed)।
  • cancelled: return URL आने से पहले customer ने browser view बंद कर दिया। 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 के लिए सेट होता है।
List<String>?
license_key query parameter। Checkout में license key products शामिल होने पर सेट होता है।
String?
email query parameter। Checkout द्वारा email address capture किए जाने पर सेट होता है।
Map<String, String>
Return URL से प्राप्त प्रत्येक query parameter, verbatim।

Payment की पुष्टि करें

Webhooks

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

Get Payment Detail

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

Appearance customization

Checkout browser के toolbar, buttons और color scheme को बदलने के लिए BrowserCustomization को CheckoutParams पर customization के रूप में pass करें। Android Custom Tabs और iOS SFSafariViewController अलग-अलग native controls expose करते हैं, इसलिए options को AndroidBrowserOptions और IosBrowserOptions में बाँटा गया है। प्रत्येक platform दूसरे के options को ignore करता है। हर field optional है और default रूप से null होता है। null field के लिए SDK वह option सेट नहीं करता और platform अपना default लागू करता है।
Color?
Toolbar का background color।
Color?
Navigation bar का color।
Color?
Navigation bar के ऊपर divider का color।
CloseButtonStyle?
standard system का “X” icon दिखाता है। back SDK द्वारा बनाया गया back arrow दिखाता है।
CloseButtonPosition?
Toolbar में close button किस ओर दिखाई देता है: start या end।
bool?
Toolbar का share icon दिखाता है। false इसे छिपाता है।
bool?
Toolbar में URL के नीचे page title दिखाता है।
bool?
Page scroll होने पर toolbar को अपने-आप छिपाता है।
bool?
Overflow menu में “Bookmark this page” दिखाता है।
bool?
Overflow menu में “Download page” दिखाता है।
BrowserColorScheme?
light या dark device की system setting की परवाह किए बिना उस appearance को force करता है। system system setting का पालन करता है।
DismissButtonStyle?
Dismiss button की style: done, close या cancel। iOS तय करता है कि इसे label या icon के रूप में render करना है।
PresentationStyle?
pageSheet (जब आप इस null को छोड़ देते हैं) एक ऐसा card प्रस्तुत करता है जिसे customer नीचे swipe करके dismiss कर सकता है। fullScreen पूरी screen को cover करता है।
bool?
Page scroll होने पर toolbar को collapse होने देता है। इसका प्रभाव केवल तब दिखाई देता है जब presentationStyle, fullScreen हो। pageSheet के साथ bars इस setting की परवाह किए बिना pinned रहते हैं।
BrowserColorScheme?
light या dark device की system setting की परवाह किए बिना उस appearance को force करता है। system system setting का पालन करता है।
iOS में toolbar color का कोई option नहीं है, क्योंकि underlying SFSafariViewController tint properties iOS 26 से deprecated हैं।

Errors

start केवल misuse या platform failure के लिए CheckoutException throw करता है। कारण code, एक CheckoutErrorCode, से पढ़ें। Native code string nativeCode में है। Customer द्वारा cancel करना या declined payment हमेशा result होता है, exception नहीं।
  • invalidCheckoutUrl (INVALID_CHECKOUT_URL): checkoutUrl, checkout.dodopayments.com या test.checkout.dodopayments.com पर /session/ से शुरू होने वाला checkout session URL नहीं है।
  • invalidReturnUrl (INVALID_RETURN_URL): returnUrl scheme और host वाला absolute URL नहीं है।
  • alreadyInProgress (ALREADY_IN_PROGRESS): कोई अन्य checkout चल रहा है। एक समय में केवल एक checkout चल सकता है।
  • platformError (PLATFORM_ERROR): unexpected platform failure। अज्ञात native errors भी इसी code में map होते हैं।

Abandoned Sessions

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

संबंधित

Mobile Integration Guide

Android, iOS और React Native के लिए वही contract।

Community Projects

समुदाय द्वारा बनाया गया एक अलग Flutter package भी उपलब्ध है।
अंतिम संशोधन 26 सितंबर 2026