تغطي هذه الصفحة Android checkout SDK،
com.dodopayments.api:checkout-android، الذي يفتح صفحة الدفع المستضافة من Dodo Payments داخل تطبيقك. لاستدعاء Dodo Payments API من خادمك، استخدم backend Kotlin SDK بدلاً من ذلك.Checkout Sessions API
أنشئ
checkout_url الذي يفتحه SDK هذا.Mobile Integration Guide
أفضل الممارسات لتدفقات الدفع عبر الأجهزة المحمولة.
androidx.browser.customtabs)، ويعيد CheckoutResult مكتوب النوع عند إكمال العميل للدفع أو مغادرته. ينشئ خادمك جلسة الدفع ويرسل checkout_url الخاص بها إلى التطبيق. لا يحتوي SDK على أي كود للشبكة ولا يحتفظ بأي API key، ولذلك لا يستدعي Dodo Payments API مطلقاً.
المتطلبات: minSdk 23 وKotlin وJava 17. يعتمد SDK فقط على androidx.activity وandroidx.browser وkotlinx-coroutines-android.
التثبيت
1
Add the Dependency
أضف SDK من Maven Central إلى يتطلب تخصيص المظهر الإصدار 1.1.0 أو إصداراً أحدث.
build.gradle.kts الخاص بوحدة تطبيقك:build.gradle.kts
2
Register a Callback URL Scheme
عيّن مخطط callback باعتباره manifest placeholder في Gradle. يعلن manifest الخاص بـ SDK نفسه عن intent filter لنشاط إعادة التوجيه باستخدام placeholder استخدم المخطط نفسه في
${dodoCallbackScheme}، ولذلك فإن هذه الخاصية هي خطوة الإعداد الوحيدة. لا تضف أي manifest XML:build.gradle.kts
CheckoutParams.returnUrl، مثل myapp://checkout/return، وعيّن عنوان URL نفسه باعتباره return_url الخاص بجلسة الدفع عند إنشاء خادمك للجلسة. يطابق SDK عنوان URL للعودة وفقاً للمخطط والمضيف والمسار، ويتجاهل query string. لا يلزم أن يحمّل عنوان URL صفحة حقيقية.إذا حذفت placeholder، يفشل البناء بسبب خطأ unresolved-placeholder. وإذا لم يطابق placeholder مخطط
returnUrl، فإن SDK يرمي PLATFORM_ERROR قبل فتح صفحة الدفع.الاستخدام
يوفر SDK طريقتين لبدء الدفع: activity result launcher ودالة suspend. ويعيد كلاهماCheckoutResult نفسه.
- Launcher (Recommended)
- Suspend Function
سجّل العقد باستخدام
registerForActivityResult، ثم شغّله:ما الذي تعنيه النتيجة
ينشئ SDKCheckoutResult من query parameters الموجودة في عنوان URL للعودة.
CheckoutStatus
مطلوب
إحدى خمس قيم:
SUCCEEDED: يحتوي عنوان URL للعودة علىstatus=succeeded(دفعة لمرة واحدة) أوstatus=active(اشتراك).FAILED: تم رفض الدفع (status=failed).CANCELLED: أغلق العميل Custom Tab قبل وصول عنوان URL للعودة. لا يعرف SDK النتيجة، وقد يكون الدفع قد نجح، لذا لا تعرض شاشة فشل. عالج الجلسة المتروكة بدلاً من ذلك.PENDING: تتم تسوية الدفع لاحقاً (status=processingأو أي قيمةrequires_*)، أو كانت المعلمةstatusمفقودة أو غير معروفة. عالجها مثلCANCELLED.EXPIRED: انتهت صلاحية جلسة الدفع (status=expired).
String?
معلمة query
payment_id، عند تضمينها في عنوان URL للعودة. اعرضها في واجهة المستخدم، لكن لا تستخدمها لمنح الوصول. راجع التحقق من الدفع.String?
معلمة query
subscription_id. يتم تعيينها لعمليات دفع الاشتراكات.List<String>?
معلمة query
license_key. يتم تعيينها عندما تتضمن عملية الدفع منتجات مفاتيح ترخيص.String?
معلمة query
email. يتم تعيينها عندما تجمع عملية الدفع عنوان بريد إلكتروني.Map<String, String>
كل query parameter من عنوان URL للعودة، حرفياً.
التحقق من الدفع
Webhooks
استمع إلى أحداث الدفع في الوقت الفعلي.
Get Payment Detail
استعلم عن حالة الدفع عند الطلب.
payment.succeeded أو subscription.active. لا تعتمد على CheckoutResult.status وحده.
تخصيص المظهر
لتغيير شريط أدوات Custom Tab وأزراره ونظام الألوان، مرّرBrowserCustomization باعتباره customization إلى CheckoutParams. كل حقل اختياري وقيمته الافتراضية null. بالنسبة إلى حقل null، لا يعيّن SDK هذا الخيار، ولذلك يطبّق المتصفح الذي يستضيف Custom Tab قيمته الافتراضية الخاصة.
Int?
لون خلفية شريط الأدوات، باعتباره قيمة ARGB من نوع
Color.لون شريط التنقل، باعتباره قيمة ARGB من نوع
Color.لون الفاصل أعلى شريط التنقل، باعتباره قيمة ARGB من نوع
Color.CloseButtonStyle?
يعرض
DEFAULT رمز النظام “X”. ويعرض BACK سهماً للعودة يرسمه SDK.CloseButtonPosition?
جانب شريط الأدوات الذي يظهر فيه زر الإغلاق:
START أو END.يعرض رمز المشاركة في شريط الأدوات. يخفيه
false.Boolean?
يعرض عنوان الصفحة أسفل عنوان URL في شريط الأدوات.
Boolean?
يخفي شريط الأدوات تلقائياً أثناء تمرير الصفحة.
Boolean?
يعرض “إضافة الصفحة إلى الإشارات المرجعية” في قائمة الخيارات الإضافية.
Boolean?
يعرض “تنزيل الصفحة” في قائمة الخيارات الإضافية.
ColorScheme?
يفرض
LIGHT أو DARK هذا المظهر بصرف النظر عن إعداد النظام على الجهاز. ويتبع SYSTEM إعداد النظام.checkoutLauncher من الاستخدام:
الأخطاء
يرميDodoCheckout.start الخطأ CheckoutError فقط عند إساءة الاستخدام أو حدوث فشل في النظام الأساسي. اقرأ السبب من CheckoutError.code:
INVALID_CHECKOUT_URL: إنcheckoutUrlليس عنوان URL لجلسة دفعhttps(مساره يبدأ بـ/session/) علىcheckout.dodopayments.comأوtest.checkout.dodopayments.com.INVALID_RETURN_URL: إنreturnUrlليس عنوان URL مطلقاً يتضمن مخططاً ومضيفاً.ALREADY_IN_PROGRESS: توجد عملية دفع أخرى قيد التشغيل. يمكن تشغيل عملية دفع واحدة فقط في كل مرة.PLATFORM_ERROR: فشل غير متوقع في النظام الأساسي، بما في ذلك مخططreturnUrlلا يطابق placeholderdodoCallbackSchemeالخاص بك.
CANCELLED أو FAILED)، وليست خطأً مرمياً. مع launcher، تُرمى أخطاء التحقق من launcher.launch(...). لا يمكن تمرير فشل النظام الأساسي بعد الإطلاق من خلال activity result callback، ولذلك يعيد launcher CANCELLED مع رمز الخطأ في raw["error"].
الجلسات المتروكة
يسجل SDK جلسة الدفع عند بدء الدفع، ويمسح السجل فقط عندما ينتهي الدفع بالحالةSUCCEEDED أو FAILED أو EXPIRED. يبقى السجل عند إيقاف التطبيق أثناء الدفع، وبعد نتيجة CANCELLED أو PENDING، لأن SDK لا يعرف النتيجة في هذه الحالات. تحقّق من وجوده عند تشغيل التطبيق في المرة التالية وبعد كل نتيجة CANCELLED أو PENDING:
abandoned.sessionId معرّف جلسة الدفع، الذي يبدأ بـ cks_. ويمثل abandoned.createdAt وقت بدء الدفع، بوصفه epoch timestamp بالمللي ثانية. يستطيع خادمك البحث عن الجلسة باستخدام Get Checkout Session، الذي يعيد payment_id وpayment_status الخاصين بها. إلى أن يصل الدفع إلى حالة نهائية، اعتبره قيد الانتظار، وليس فاشلاً.
ذات صلة
Mobile Integration Guide
أفضل الممارسات لتدفقات الدفع عبر الأجهزة المحمولة.
Kotlin SDK
Backend SDK للعمليات من جهة الخادم.