मुख्य सामग्री पर जाएं
PHP SDK Dodo Payments को आपके PHP अनुप्रयोगों में एकीकृत करने का एक मजबूत और लचीला तरीका प्रदान करता है। यह आधुनिक PHP मानकों के अनुसार PSR-4 ऑटोलोडिंग के साथ बनाया गया है, और इसमें व्यापक परीक्षण कवरेज और विस्तृत दस्तावेज़ीकरण है।
Dodo Payments PHP API लाइब्रेरी वर्तमान में बीटा में है। हम इसके साथ प्रयोग करने के लिए उत्साहित हैं! कृपया एक समस्या दर्ज करके कोई सुझाव, बग रिपोर्ट या फीचर अनुरोध साझा करें।

स्थापना

SDK को Composer का उपयोग करके स्थापित करें:
composer require dodopayments/client
SDK को PHP 8.1.0 या उच्चतर और निर्भरता प्रबंधन के लिए Composer की आवश्यकता है।

त्वरित प्रारंभ

क्लाइंट को प्रारंभ करें और एक चेकआउट सत्र बनाएं:
<?php

use Dodopayments\Client;

$client = new Client(
  bearerToken: getenv('DODO_PAYMENTS_API_KEY') ?: 'My Bearer Token',
  // use 'https://test.dodopayments.com' for test mode
  baseUrl: 'https://live.dodopayments.com'
);

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

var_dump($checkoutSessionResponse->session_id);
अपने API कुंजियों को सुरक्षित रूप से पर्यावरण चर का उपयोग करके स्टोर करें। उन्हें कभी भी अपने कोडबेस में उजागर न करें या संस्करण नियंत्रण में कमिट न करें।

मुख्य विशेषताएँ

PSR-4 अनुपालन

आधुनिक PHP विकास के लिए PHP मानक सिफारिशों का पालन करता है

आधुनिक PHP

PHP 8.1+ के लिए प्रकार घोषणाओं और सख्त प्रकारों के साथ बनाया गया

व्यापक परीक्षण

विश्वसनीयता और स्थिरता के लिए व्यापक परीक्षण कवरेज

अपवाद प्रबंधन

विभिन्न त्रुटि परिदृश्यों के लिए स्पष्ट अपवाद प्रकार

मूल्य वस्तुएं

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");

कॉन्फ़िगरेशन

पुनः प्रयास कॉन्फ़िगरेशन

कुछ त्रुटियों को डिफ़ॉल्ट रूप से 2 बार स्वचालित रूप से पुनः प्रयास किया जाता है, जिसमें एक छोटा एक्सपोनेंशियल बैकऑफ होता है। निम्नलिखित त्रुटियाँ स्वचालित पुनः प्रयास को ट्रिगर करती हैं:
  • कनेक्शन त्रुटियाँ (नेटवर्क कनेक्टिविटी समस्याएँ)
  • 408 अनुरोध समय समाप्त
  • 409 संघर्ष
  • 429 दर सीमा
  • 500+ आंतरिक त्रुटियाँ
  • समय समाप्त
वैश्विक या प्रति अनुरोध पुनः प्रयास व्यवहार कॉन्फ़िगर करें:
<?php

use Dodopayments\Client;
use Dodopayments\RequestOptions;

// Configure default for all requests (disable retries)
$client = new Client(maxRetries: 0);

// Or, configure per-request
$result = $client->checkoutSessions->create(
  productCart: [["productID" => "product_id", "quantity" => 1]],
  requestOptions: RequestOptions::with(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: "[email protected]",
  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);
}

त्रुटि प्रबंधन

जब लाइब्रेरी API से कनेक्ट नहीं कर पाती है या एक गैर-सफल स्थिति कोड (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
हमेशा API कॉल को संभावित त्रुटियों को संभालने के लिए 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: RequestOptions::with(
    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)%"

संसाधन

समर्थन

PHP SDK के साथ मदद चाहिए?

योगदान

हम योगदान का स्वागत करते हैं! प्रारंभ करने के लिए योगदान दिशानिर्देश की जांच करें.