यह पृष्ठ 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 को Appearance customization के लिए version 1.1.0 या बाद का version आवश्यक है।Android plugin डिफ़ॉल्ट रूप से Android SDK 35 के विरुद्ध compile होता है। यदि किसी अन्य plugin को अधिक उच्च
pubspec.yaml में जोड़ें:pubspec.yaml
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 करने की आवश्यकता नहीं है।- iOS
- Android
अपने 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 बनाता है।
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), अथवाstatusparameter 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 करें।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 लागू करता है।
Android — Custom Tab
Android — Custom Tab
Color?
Toolbar का background color।
Navigation bar का color।
Navigation bar के ऊपर divider का color।
CloseButtonStyle?
standard system का “X” icon दिखाता है। back SDK द्वारा बनाया गया back arrow दिखाता है।CloseButtonPosition?
Toolbar में close button किस ओर दिखाई देता है:
start या end।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 का पालन करता है।iOS — SFSafariViewController
iOS — SFSafariViewController
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 का पालन करता है।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):returnUrlscheme और 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 भी उपलब्ध है।