Skip to main content
تغطي هذه الصفحة 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

أفضل الممارسات لتدفقات الدفع عبر الأجهزة المحمولة.
يفتح Android SDK صفحة الدفع المستضافة من Dodo Payments في Custom Tab (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 إلى build.gradle.kts الخاص بوحدة تطبيقك:
build.gradle.kts
يتطلب تخصيص المظهر الإصدار 1.1.0 أو إصداراً أحدث.
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 نفسه.

ما الذي تعنيه النتيجة

ينشئ SDK CheckoutResult من query parameters الموجودة في عنوان URL للعودة.
حقل status هو تلميح لواجهة المستخدم، وليس دليلاً على الدفع. قبل منح الوصول، أكّد الدفع على خادمك باستخدام webhook أو نقطة النهاية Get Payment Detail.
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

استعلم عن حالة الدفع عند الطلب.
لا تمنح الوصول إلا بعد أن يؤكد أحد هذه الخيارات الدفع، على سبيل المثال باستخدام webhook payment.succeeded أو subscription.active. لا تعتمد على CheckoutResult.status وحده.

تخصيص المظهر

لتغيير شريط أدوات Custom Tab وأزراره ونظام الألوان، مرّر BrowserCustomization باعتباره customization إلى CheckoutParams. كل حقل اختياري وقيمته الافتراضية null. بالنسبة إلى حقل null، لا يعيّن SDK هذا الخيار، ولذلك يطبّق المتصفح الذي يستضيف Custom Tab قيمته الافتراضية الخاصة.
Int?
لون خلفية شريط الأدوات، باعتباره قيمة ARGB من نوع Color.
Int?
لون شريط التنقل، باعتباره قيمة ARGB من نوع Color.
Int?
لون الفاصل أعلى شريط التنقل، باعتباره قيمة ARGB من نوع Color.
CloseButtonStyle?
يعرض DEFAULT رمز النظام “X”. ويعرض BACK سهماً للعودة يرسمه SDK.
CloseButtonPosition?
جانب شريط الأدوات الذي يظهر فيه زر الإغلاق: START أو END.
Boolean?
يعرض رمز المشاركة في شريط الأدوات. يخفيه 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 لا يطابق placeholder dodoCallbackScheme الخاص بك.
تكون عملية إلغاء العميل، أو الدفع المرفوض، دائماً نتيجة (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 للعمليات من جهة الخادم.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦