Sequence لتكرار النتائج، والدوال suspend للاستدعاءات غير المتزامنة.
التثبيت
Gradle (Kotlin DSL)
أضف التبعية إلىbuild.gradle.kts:
build.gradle.kts
Maven
أضف التبعية إلىpom.xml:
pom.xml
يتطلب SDK الإصدار 8 من Java أو إصدارًا أحدث. ويعمل على JVM وعلى Android، ويتضمن قواعد الاحتفاظ الخاصة بـ ProGuard وR8.
البداية السريعة
أنشئ عميلًا، ثم أنشئ جلسة دفع: CODE_PLACEHOLDER_f4d367e72956565b_END يتصلfromEnv() بالوضع المباشر ما لم يحدد DODO_PAYMENTS_BASE_URL أو dodopayments.baseUrl خلاف ذلك. لاستخدام وضع الاختبار، راجع وضع الاختبار. يعمل مفتاح API الخاص بوضع الاختبار في وضع الاختبار فقط.
الميزات الأساسية
Coroutines
دوال العميل غير المتزامن هي دوال
suspend تستدعيها من coroutine.Null Safety
الحقول التي قد تكون مفقودة هي أنواع قابلة للقيمة الفارغة، وليست
Optional.Sequences
في العميل المتزامن، يعيد
autoPager() قيمة Sequence تجلب المزيد من الصفحات أثناء التكرار. وفي العميل غير المتزامن، يعيد قيمة Flow.Immutable Models
فئات النماذج غير قابلة للتغيير، ويعيد
toBuilder() أداة إنشاء لنسخة معدلة.الإعدادات
من متغيرات البيئة
يقرأfromEnv() إعداداتك من متغيرات البيئة أو خصائص النظام. وتكون الأولوية لخصائص النظام:
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):
التعامل مع الاشتراكات
أنشئ اشتراكًا، ثم افرض رسومًا عليه إذا كان اشتراكًا عند الطلب.يتطلب
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 لمعالجة الأخطاء الوظيفية:
تكامل Android
Kotlin SDK هو server SDK. تتم مصادقته باستخدام secret API key الخاص بك، ويمكن لأي شخص يملك ملف APK الخاص بك استخراج أي key مُضمّن فيه، لذا لا تستخدمه مطلقًا داخل تطبيق Android. لتحصيل المدفوعات في تطبيق Android:- على خادمك، أنشئ جلسة checkout باستخدام هذا SDK (راجع تكامل Ktor) وأعد
checkout_url. - في التطبيق، اجلب
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:- Discord: انضم إلى خادم المجتمع للحصول على المساعدة الفورية.
- البريد الإلكتروني: تواصل مع support@dodopayments.com.
- GitHub: افتح issue في المستودع.