Skip to main content
يمنح Kotlin SDK تطبيقات Kotlin وصولًا من النوع المحدد إلى REST API الخاصة بـ Dodo Payments. ويستخدم أنواع Kotlin في جميع أجزائه: القيم القابلة للقيمة الفارغة للحقول التي قد تكون مفقودة، وSequence لتكرار النتائج، والدوال suspend للاستدعاءات غير المتزامنة.

التثبيت

Gradle (Kotlin DSL)

أضف التبعية إلى build.gradle.kts:
build.gradle.kts

Maven

أضف التبعية إلى pom.xml:
pom.xml
تضيف إصدارات SDK دعمًا لتغييرات API. للعثور على أحدث إصدار، راجع Maven Central.
يتطلب SDK الإصدار 8 من Java أو إصدارًا أحدث. ويعمل على JVM وعلى Android، ويتضمن قواعد الاحتفاظ الخاصة بـ ProGuard وR8.

البداية السريعة

أنشئ عميلًا، ثم أنشئ جلسة دفع: CODE_PLACEHOLDER_f4d367e72956565b_END يتصل fromEnv() بالوضع المباشر ما لم يحدد DODO_PAYMENTS_BASE_URL أو dodopayments.baseUrl خلاف ذلك. لاستخدام وضع الاختبار، راجع وضع الاختبار. يعمل مفتاح API الخاص بوضع الاختبار في وضع الاختبار فقط.
احتفظ بمفاتيح API في متغيرات البيئة أو في مدير أسرار. لا تودعها مطلقًا في نظام التحكم بالإصدارات.

الميزات الأساسية

Coroutines

دوال العميل غير المتزامن هي دوال suspend تستدعيها من coroutine.

Null Safety

الحقول التي قد تكون مفقودة هي أنواع قابلة للقيمة الفارغة، وليست Optional.

Sequences

في العميل المتزامن، يعيد autoPager() قيمة Sequence تجلب المزيد من الصفحات أثناء التكرار. وفي العميل غير المتزامن، يعيد قيمة Flow.

Immutable Models

فئات النماذج غير قابلة للتغيير، ويعيد toBuilder() أداة إنشاء لنسخة معدلة.

الإعدادات

من متغيرات البيئة

يقرأ fromEnv() إعداداتك من متغيرات البيئة أو خصائص النظام. وتكون الأولوية لخصائص النظام:
يأتي مفتاح API من DODO_PAYMENTS_API_KEY أو dodopayments.apiKey. ويأتي سر توقيع webhook من DODO_PAYMENTS_WEBHOOK_KEY أو dodopayments.webhookKey، كما يأتي عنوان URL الأساسي من DODO_PAYMENTS_BASE_URL أو dodopayments.baseUrl. أنشئ عميلًا واحدًا وأعد استخدامه، لأن لكل عميل مجموعة اتصالات ومجموعات مؤشرات ترابط خاصة به. للتحقق من webhook، مرر نص الطلب الخام والعناوين إلى client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build())، حيث إن headers هو com.dodopayments.api.core.http.Headers. ويتحقق من التوقيع باستخدام مفتاح webhook الخاص بك ويعيد الحدث الذي تمت تحليله، أو يطرح DodoPaymentsWebhookException. من دون عناوين، لا يتحقق unwrap من التوقيع. يحلل client.webhooks().unsafeUnwrap(rawBody) النص من دون التحقق منه، لذا استخدمه للاختبار فقط. راجع Webhooks.

الإعداد اليدوي

عيّن كل خيار في أداة الإنشاء:

وضع الاختبار

لاستخدام وضع الاختبار (https://test.dodopayments.com)، استدعِ testMode() في أداة الإنشاء:

مهلات الانتظار وإعادة المحاولات

يعيد العميل المحاولة مرتين افتراضيًا، وتنتهي المهلة بعد دقيقة واحدة. ويعيد المحاولة عند أخطاء الاتصال والاستجابات ذات رموز الحالة 408 أو 409 أو 429 أو 500 وما فوق، مع استخدام تراجع أُسّي. عيّن القيم الافتراضية على العميل، أو مرر RequestOptions إلى استدعاء واحد:

العمليات الشائعة

تستخدم الأمثلة في هذا القسم client من البدء السريع.

إنشاء جلسة دفع

أنشئ جلسة دفع، ثم أعد توجيه العميل إلى عنوان URL للدفع الذي تم إرجاعه:
يعيد checkoutUrl() قيمة String? قابلة للقيمة الفارغة. يعمل كل عنوان URL للدفع مرة واحدة وينتهي بعد 24 ساعة. للاطلاع على كل خيار من خيارات الجلسة، راجع جلسات الدفع.

إنشاء منتج

أنشئ منتج اشتراك شهري بسعر $29.99:
تكون قيمة price بوحدة العملة الأصغر. ويحدد discountBps الخصم بنقاط الأساس ويستبدل الحقل المهجور discount.

تفعيل مفتاح ترخيص

فعّل مفتاح ترخيص لجهاز أو عملية تثبيت. إذا وصل المفتاح إلى حد التفعيل الخاص به، تعيد API القيمة 422 ويطرح SDK القيمة UnprocessableEntityException. يعيد المفتاح غير النشط القيمة 403 (PermissionDeniedException)، بينما يعيد المفتاح غير المعروف القيمة 404 (NotFoundException):

التعامل مع الاشتراكات

أنشئ اشتراكًا، ثم افرض رسومًا عليه إذا كان اشتراكًا عند الطلب.
إن POST /subscriptions (وهو أسلوب subscriptions().create() في SDK) مهجور. ولا يزال يعمل مع عمليات التكامل الحالية، لكن ينبغي لعمليات التكامل الجديدة إنشاء الاشتراكات من خلال جلسة دفع.
يتطلب billing فقط country، وهو رمز بلد ISO مكوّن من حرفين. استخدم AttachExistingCustomer لإرفاق عميل موجود، أو NewCustomer لإنشاء عميل. تُستخدم charge مع الاشتراكات عند الطلب، وتكون قيمة productPrice بوحدة العملة الأصغر.

الفوترة حسب الاستخدام

تسجيل أحداث الاستخدام

أرسل حدث استخدام لعميل. وتجمع العدادات التي تتتبع eventName الخاص بالحدث هذه الأحداث:
إن eventId هو مفتاح منع التكرار، لذا امنح كل حدث قيمة فريدة. يقبل الطلب ما يصل إلى 1,000 حدث.

العمليات غير المتزامنة

العميل غير المتزامن

يمتلك العميل غير المتزامن الأساليب نفسها الموجودة لدى العميل المتزامن، لكن معظمها دوال suspend. استدعها من coroutine:
يمكنك أيضًا استدعاء client.async() على عميل متزامن للحصول على نسخته غير المتزامنة.

معالجة الأخطاء

عند حدوث حالة خطأ، يطرح SDK فئة فرعية من DodoPaymentsServiceException، التي تتضمن statusCode() وheaders() وbody(). والفئات الفرعية هي BadRequestException (400)، وUnauthorizedException (401)، وPermissionDeniedException (403)، وNotFoundException (404)، وUnprocessableEntityException (422)، وRateLimitException (429)، وInternalServerException (5xx)، وUnexpectedStatusCodeException للحالات الأخرى، مثل 409:
تطرح أعطال الشبكة DodoPaymentsIoException، بينما تطرح الاستجابات التي يتعذر على SDK تفسيرها DodoPaymentsInvalidDataException. وتمتد جميع استثناءات SDK من DodoPaymentsException.

معالجة الأخطاء الوظيفية

استخدم Result لمعالجة الأخطاء الوظيفية:
يلتقط runCatching كل استثناء، بما في ذلك استثناءات SDK، ويعيدها كـ Result فاشل.

تكامل Android

Kotlin SDK هو server SDK. تتم مصادقته باستخدام secret API key الخاص بك، ويمكن لأي شخص يملك ملف APK الخاص بك استخراج أي key مُضمّن فيه، لذا لا تستخدمه مطلقًا داخل تطبيق Android. لتحصيل المدفوعات في تطبيق Android:
  1. على خادمك، أنشئ جلسة checkout باستخدام هذا SDK (راجع تكامل Ktor) وأعد checkout_url.
  2. في التطبيق، اجلب checkout_url من خادمك وافتحه باستخدام Android SDK، الذي لا يحتوي على أي API key.

التحقق من الاستجابة

بشكل افتراضي، يرمي SDK الاستثناء DodoPaymentsInvalidDataException فقط عند قراءة خاصية ذات نوع غير متوقع. للتحقق من الاستجابة كاملةً مسبقًا، فعّل التحقق لطلب ما، أو استدعِ validate() على استجابة:

الميزات المتقدمة

إعداد Proxy

لإرسال الطلبات عبر Proxy، مرّر java.net.Proxy إلى builder:

الإعداد المؤقت

يعيد withOptions عميلًا بإعدادات معدّلة، ويشارك هذا العميل مجمّعات الاتصالات ومؤشرات الترابط الخاصة بالعميل الأصلي. لا يتغير العميل الأصلي:

تكامل Ktor

أنشئ العميل مرة واحدة واستدعِه من route:

الموارد

GitHub Repository

الشيفرة المصدرية والإصدارات والقائمة الكاملة للطرائق.

API Reference

كل endpoint وparameter واستجابة.

Discord Community

اطرح الأسئلة وتحدث مع المطورين الآخرين.

Report Issues

أبلغ عن الأخطاء أو اطلب ميزات جديدة.

الدعم

للحصول على المساعدة بشأن Kotlin SDK:

المساهمة

للمساهمة، اقرأ إرشادات المساهمة.
آخر تعديل في ٢٦ سبتمبر ٢٠٢٦