التثبيت
ثبّت 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.
الميزات الأساسية
PSR-4 Compliant
Modern PHP
Extensive Testing
Exception Handling
كائنات القيم
تستخدم الطرق معاملات مسماة، ويجب تمرير المعاملات التي لها قيمة افتراضية بالاسم. لإنشاء كائن قيمة، استخدم المُنشئ الثابتwith مع معاملات مسماة:
["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، على مستوى العميل أو طلب واحد:
timeout، بالثواني، في مصفوفة requestOptions نفسها.
العمليات الشائعة
تستخدم الأمثلة في هذا القسم$client من البدء السريع.
إنشاء جلسة دفع
أنشئ جلسة دفع، ثم أعد توجيه العميل إلىcheckoutURL المُعاد:
إدارة العملاء
أنشئ عميلًا باستخدام عنوان بريد إلكتروني واسم، ثم استرده باستخدام المعرّف:التعامل مع الاشتراكات
أنشئ اشتراكًا، ثم افرض رسومًا عليه إذا كان اشتراكًا عند الطلب.لا يتطلب
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:
الاستخدام المتقدم
نقاط النهاية غير الموثقة
لاستدعاء نقطة نهاية لا تتوفر لها طريقة في 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:- Discord: انضم إلى خادم المجتمع للحصول على مساعدة فورية.
- البريد الإلكتروني: تواصل مع support@dodopayments.com.
- GitHub: افتح مشكلة في المستودع.