الانتقال إلى المحتوى الرئيسي
يوفر SDK PHP طريقة قوية ومرنة لدمج مدفوعات دودي في تطبيقات PHP الخاصة بك. تم بناؤه وفقًا لمعايير PHP الحديثة مع تحميل تلقائي متوافق مع PSR-4، ويقدم تغطية اختبار شاملة ووثائق مفصلة.

التثبيت

قم بتثبيت SDK باستخدام Composer:
composer require "dodopayments/client 5.8.1"
يتطلب SDK إصدار PHP 8.1.0 أو أعلى وComposer لإدارة التبعيات.

بداية سريعة

قم بتهيئة العميل وإنشاء جلسة دفع:
<?php

use Dodopayments\Client;

$client = new Client(
  bearerToken: getenv('DODO_PAYMENTS_API_KEY') ?: 'My Bearer Token',
  environment: 'test_mode',
);

$checkoutSessionResponse = $client->checkoutSessions->create(
  productCart: [["productID" => "product_id", "quantity" => 1]]
);

var_dump($checkoutSessionResponse->session_id);
خزّن مفاتيح API الخاصة بك بشكل آمن باستخدام متغيرات البيئة. لا تكشفها أبداً في قاعدة الشيفرة أو ترفعها إلى نظام التحكم في الإصدارات.

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

PSR-4 Compliant

يتبع توصيات معايير PHP للتطوير الحديث بلغة PHP

Modern PHP

مصمم لـ PHP 8.1+ بإعلانات الأنواع والأنواع الصارمة

Extensive Testing

تغطية اختبار شاملة للموثوقية والاستقرار

Exception Handling

أنواع استثناءات واضحة لسيناريوهات الأخطاء المختلفة

كائنات القيمة

يستخدم SDK المعاملات المسماة لتحديد الوسائط الاختيارية. يمكنك تهيئة كائنات القيمة باستخدام الباني الساكن with:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

// Recommended: Use static 'with' constructor with named parameters
$customer = AttachExistingCustomer::with(customerID: "customer_id");
كما تتوفر البُناة كنهج بديل:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

// Alternative: Use builder pattern
$customer = (new AttachExistingCustomer)->withCustomerID("customer_id");

التكوين

تكوين إعادة المحاولة

يتم إعادة محاولة بعض الأخطاء تلقائياً مرتين افتراضياً مع تراجع أُسّي قصير. تقوم الأخطاء التالية بتشغيل إعادة المحاولة التلقائية:
  • أخطاء الاتصال (مشاكل في الاتصال الشبكي)
  • 408 انتهاء مهلة الطلب
  • 409 تعارض
  • 429 حد المعدل
  • أخطاء داخلية 500+
  • انتهاء المهلة
قم بتكوين سلوك إعادة المحاولة بشكل عام أو لكل طلب:
<?php

use Dodopayments\Client;

// Configure default for all requests (disable retries)
$client = new Client(requestOptions: ['maxRetries' => 0]);

// Or, configure per-request
$result = $client->checkoutSessions->create(
  productCart: [["productID" => "product_id", "quantity" => 1]],
  requestOptions: ['maxRetries' => 5],
);

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

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

أنشئ جلسة دفع:
$session = $client->checkoutSessions->create(
  productCart: [
    ["productID" => "prod_123", "quantity" => 1]
  ],
  returnUrl: "https://yourdomain.com/return"
);

header('Location: ' . $session->url);

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

أنشئ معلومات العملاء واسترجعها:
// Create a customer
$customer = $client->customers->create(
  email: "customer@example.com",
  name: "John Doe",
  metadata: [
    "user_id" => "12345"
  ]
);

// Retrieve customer
$customer = $client->customers->retrieve("cus_123");
echo "Customer: {$customer->name} ({$customer->email})";

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

أنشئ وادِر الاشتراكات المتكررة:
// Create a subscription
$subscription = $client->subscriptions->create(
  customerID: "cus_123",
  productID: "prod_456",
  priceID: "price_789"
);

// Cancel subscription
$client->subscriptions->cancel($subscription->id);

الترميز

اعمل مع استجابات القوائم المقسمة إلى صفحات:
$page = $client->payments->list();

var_dump($page);

// Fetch items from the current page
foreach ($page->getItems() as $item) {
  var_dump($item->brand_id);
}

// Auto-paginate: fetch items from all pages
foreach ($page->pagingEachItem() as $item) {
  var_dump($item->brand_id);
}

التعامل مع الأخطاء

عندما لا يستطيع المكتبة الاتصال بواجهة برمجة التطبيقات أو يتلقى رمز حالة غير ناجح (4xx أو 5xx)، يتم رمي فئة فرعية من APIException:
<?php

use Dodopayments\Core\Exceptions\APIConnectionException;
use Dodopayments\Core\Exceptions\RateLimitException;
use Dodopayments\Core\Exceptions\APIStatusException;

try {
  $checkoutSessionResponse = $client->checkoutSessions->create(
    productCart: [["productID" => "product_id", "quantity" => 1]]
  );
} catch (APIConnectionException $e) {
  echo "The server could not be reached", PHP_EOL;
  var_dump($e->getPrevious());
} catch (RateLimitException $_) {
  echo "A 429 status code was received; we should back off a bit.", PHP_EOL;
} catch (APIStatusException $e) {
  echo "Another non-200-range status code was received", PHP_EOL;
  echo $e->getMessage();
}

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

السببنوع الخطأ
HTTP 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
خطأ HTTP آخرAPIStatusException
انتهاء المهلةAPITimeoutException
خطأ شبكةAPIConnectionException
احرص دائماً على تغليف استدعاءات واجهة برمجة التطبيقات في كتل try-catch لمعالجة الأخطاء المحتملة برشاقة وتوفير تغذية راجعة ذات معنى للمستخدمين.

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

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

قم بإرسال طلبات إلى نقاط نهاية غير موثقة:
<?php

$response = $client->request(
  method: "post",
  path: '/undocumented/endpoint',
  query: ['dog' => 'woof'],
  headers: ['useful-header' => 'interesting-value'],
  body: ['hello' => 'world']
);

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

أرسل معلمات غير موثقة إلى أي نقطة نهاية أو اقرأ خصائص استجابة غير موثقة:
<?php

use Dodopayments\RequestOptions;

$checkoutSessionResponse = $client->checkoutSessions->create(
  productCart: [["productID" => "product_id", "quantity" => 1]],
  requestOptions: [
    'extraQueryParams' => ["my_query_parameter" => "value"],
    'extraBodyParams' => ["my_body_parameter" => "value"],
    'extraHeaders' => ["my-header" => "value"],
  ],
);
المعلمات extra* ذات الاسم نفسه تُلغي المعلمات الموثقة.

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

Laravel

أنشئ خدمة لتطبيقات Laravel:
<?php

namespace App\Services;

use Dodopayments\Client;

class PaymentService
{
    protected $client;

    public function __construct()
    {
        $this->client = new Client(
            bearerToken: config('services.dodo.api_key')
        );
    }

    public function createCheckout(array $items)
    {
        return $this->client->checkoutSessions->create(
            productCart: $items,
            returnUrl: route('checkout.return')
        );
    }
}
أضف التكوين في config/services.php:
'dodo' => [
    'api_key' => env('DODO_API_KEY'),
    'environment' => env('DODO_ENVIRONMENT', 'sandbox')
],

Symfony

أنشئ خدمة في Symfony:
<?php

namespace App\Service;

use Dodopayments\Client;

class DodoPaymentService
{
    private Client $client;

    public function __construct(string $apiKey)
    {
        $this->client = new Client(bearerToken: $apiKey);
    }

    public function createPayment(int $amount, string $currency, string $customerId): object
    {
        return $this->client->payments->create(
            amount: $amount,
            currency: $currency,
            customerID: $customerId
        );
    }
}
سجّل في config/services.yaml:
services:
  App\Service\DodoPaymentService:
    arguments:
      $apiKey: "%env(DODO_API_KEY)%"

الموارد

الدعم

هل تحتاج مساعدة في SDK لـ PHP؟

المساهمة

نرحب بالمساهمات! اطلع على إرشادات المساهمة للبدء.