Skip to main content
يتيح PHP SDK لتطبيقات PHP 8.1+ الوصول إلى REST API الخاص بـ Dodo Payments. تستخدم الطرق معاملات مسماة، وتكون الاستجابات كائنات مكتوبة، بينما يحمّل Composer SDK باستخدام التحميل التلقائي PSR-4.

التثبيت

ثبّت SDK باستخدام Composer:
يتطلب SDK الإصدار PHP 8.1.0 أو إصدارًا أحدث وComposer. ويرسل الطلبات من خلال عميل HTTP متوافق مع PSR-18 في مشروعك، مثل Guzzle، والذي يعثر عليه باستخدام php-http/discovery.

بداية سريعة

أنشئ عميلًا، ثم أنشئ جلسة دفع:
إذا حذفت bearerToken، فسيقرأ العميل متغير البيئة DODO_PAYMENTS_API_KEY. وإذا حذفت baseUrl، فسيقرأ العميل DODO_PAYMENTS_BASE_URL، ويتصل بالوضع المباشر (https://live.dodopayments.com) عندما لا يكون ذلك مضبوطًا أيضًا. لا يعمل مفتاح API الخاص بوضع الاختبار إلا مع عنوان URL الخاص بوضع الاختبار، https://test.dodopayments.com.
احتفظ بمفاتيح API في متغيرات البيئة أو في مدير أسرار. لا تكشفها مطلقًا في قاعدة التعليمات البرمجية أو تلتزم بها في نظام التحكم بالإصدارات.

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

PSR-4 Compliant

يحمّل Composer مساحة الأسماء Dodopayments باستخدام التحميل التلقائي PSR-4.

Modern PHP

مصمم للعمل مع PHP 8.1 أو إصدار أحدث، مع معاملات مكتوبة وأنواع صارمة.

Extensive Testing

يتضمن مستودع SDK مجموعة اختبارات لخدمات API.

Exception Handling

فئة استثناء لكل حالة خطأ HTTP، بالإضافة إلى استثناءات المهلة والاتصال.

كائنات القيم

تستخدم الطرق معاملات مسماة، ويجب تمرير المعاملات التي لها قيمة افتراضية بالاسم. لإنشاء كائن قيمة، استخدم المُنشئ الثابت with مع معاملات مسماة:
يحتوي كل كائن قيمة أيضًا على أداة إنشاء:
تقبل الطرق أيضًا مصفوفات عادية بالمفاتيح نفسها بصيغة camelCase، مثل ["productID" => "pdt_123", "quantity" => 1]. وتستخدم خصائص الاستجابة أسماء بصيغة camelCase أيضًا، مثل $session->checkoutURL.

الإعدادات

يقبل مُنشئ Client كلًا من bearerToken وwebhookKey وbaseUrl وrequestOptions. وعند حذفها، يقرأ DODO_PAYMENTS_API_KEY وDODO_PAYMENTS_WEBHOOK_KEY (سر توقيع webhook الخاص بك) وDODO_PAYMENTS_BASE_URL من البيئة. للتحقق من webhook، مرّر نص الطلب الخام والعناوين إلى $client->webhooks->unwrap($body, headers: $headers). يتحقق من التوقيع باستخدام مفتاح webhook الخاص بك، ويعيد الحدث الذي تم تحليله، ويطرح WebhookException إذا فشل التحقق. إذا حذفت headers، فلن يتحقق unwrap من التوقيع. يحلل $client->webhooks->unsafeUnwrap($body) النص الأساسي دون التحقق منه، لذا استخدمه للاختبار فقط. راجع Webhooks.

إعداد إعادة المحاولة

يعيد SDK محاولة بعض الأخطاء مرتين افتراضيًا، مع تأخير أُسّي قصير. تؤدي الأخطاء التالية إلى إعادة المحاولة:
  • أخطاء الاتصال (مشكلات اتصال الشبكة)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 500+ أخطاء داخلية
  • انتهاء المهلة
اضبط maxRetries في requestOptions، على مستوى العميل أو طلب واحد:
تنتهي مهلة الطلبات بعد 60 ثانية افتراضيًا. لتغيير الحد، اضبط timeout، بالثواني، في مصفوفة requestOptions نفسها.

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

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

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

أنشئ جلسة دفع، ثم أعد توجيه العميل إلى checkoutURL المُعاد:
يعمل كل عنوان URL للدفع مرة واحدة وتنتهي صلاحيته بعد 24 ساعة. للاطلاع على كل خيار من خيارات الجلسة، راجع Checkout Sessions.

إدارة العملاء

أنشئ عميلًا باستخدام عنوان بريد إلكتروني واسم، ثم استرده باستخدام المعرّف:

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

أنشئ اشتراكًا، ثم افرض رسومًا عليه إذا كان اشتراكًا عند الطلب.
POST /subscriptions (طريقة subscriptions->create في SDK) مهملة. لا تزال تعمل مع عمليات الدمج الحالية، لكن يجب أن تنشئ عمليات الدمج الجديدة الاشتراكات من خلال Checkout Session.
لا يتطلب billing سوى country، وهو رمز بلد ISO مكوّن من حرفين. مرّر AttachExistingCustomer::with(customerID: '...') لإرفاق عميل موجود، أو NewCustomer::with(email: '...', name: '...') لإنشاء عميل. توجد الفئتان في مساحة الأسماء Dodopayments\Payments. يُستخدم charge مع الاشتراكات عند الطلب، بينما يُعبّر productPrice عن أصغر وحدة من العملة.

تقسيم الصفحات

تعيد طرق القوائم كائن صفحة. يعيد getItems() العناصر الموجودة في الصفحة الحالية، بينما يعيد pagingEachItem() كل عنصر بدءًا من الصفحة الحالية، مع طلب المزيد من الصفحات عند الحاجة:
للانتقال صفحة واحدة في كل مرة، استدعِ hasNextPage() وgetNextPage().

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

عندما يتعذر على SDK الاتصال بـ API، أو يعيد API حالة 4xx أو 5xx، يطرح SDK فئة فرعية من Dodopayments\Core\Exceptions\APIException:

أنواع الأخطاء

تعتمد فئة الاستثناء على السبب. توجد جميع الفئات في مساحة الأسماء Dodopayments\Core\Exceptions:
التقط هذه الاستثناءات حول استدعاءات API حتى يتمكن تطبيقك من عرض رسالة واضحة أو المحاولة مرة أخرى لاحقًا. في حالة الخطأ القابل لإعادة المحاولة، لا يطرح SDK الاستثناء إلا بعد فشل محاولاته التلقائية.

الاستخدام المتقدم

نقاط النهاية غير الموثقة

لاستدعاء نقطة نهاية لا تتوفر لها طريقة في SDK، استخدم $client->request. ويطبّق ذلك المصادقة وإعادة المحاولة نفسيهما المستخدمتين في طرق SDK:

المعاملات غير الموثقة

لإرسال معاملات لا يعرّفها SDK، مرّرها في requestOptions:
يتجاوز معامل extra* الذي يحمل الاسم نفسه لمعامل موثق ذلك المعامل الموثق.

التكامل مع أطر العمل

Laravel

غلّف العميل داخل فئة خدمة. يضبط هذا المثال عنوان URL الخاص بـ API من البيئة المهيأة:
أضف الإعدادات إلى config/services.php:

Symfony

أنشئ خدمة تتلقى مفتاح API من خلال مُنشئها:
سجّل الخدمة في config/services.yaml:

الموارد

GitHub Repository

التعليمات البرمجية المصدرية والإصدارات والقائمة الكاملة للطرق.

API Reference

كل نقطة نهاية ومعامل واستجابة.

Discord Community

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

Report Issues

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

الدعم

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

المساهمة

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