Zum Hauptinhalt springen
Das PHP SDK bietet eine robuste und flexible Möglichkeit, Dodo Payments in Ihre PHP-Anwendungen zu integrieren. Es wurde nach modernen PHP-Standards mit PSR-4-Autoloading entwickelt und bietet umfassende Testabdeckung sowie detaillierte Dokumentation.

Installation

Installieren Sie das SDK mit Composer:
composer require "dodopayments/client 5.8.1"
Das SDK benötigt PHP 8.1.0 oder höher sowie Composer für die Abhängigkeitsverwaltung.

Schnellstart

Initialisieren Sie den Client und erstellen Sie eine Checkout-Sitzung:
<?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);
Speichern Sie Ihre API-Schlüssel sicher mit Umgebungsvariablen. Geben Sie sie niemals im Code oder in der Versionskontrolle frei.

Kernfunktionen

PSR-4 Compliant

Entspricht den PHP Standards-Empfehlungen für moderne PHP-Entwicklung

Modern PHP

Entwickelt für PHP 8.1+ mit Typdeklarationen und strikten Typen

Extensive Testing

Umfassende Testabdeckung für Zuverlässigkeit und Stabilität

Exception Handling

Klar definierte Ausnahmearten für verschiedene Fehlerszenarien

Value-Objekte

Das SDK verwendet benannte Parameter, um optionale Argumente anzugeben. Sie können Value-Objekte mit dem statischen with-Konstruktor initialisieren:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

// Recommended: Use static 'with' constructor with named parameters
$customer = AttachExistingCustomer::with(customerID: "customer_id");
Builder sind ebenfalls als alternatives Muster verfügbar:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

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

Konfiguration

Wiederholungs-Konfiguration

Bestimmte Fehler werden standardmäßig zweimal automatisch mit einem kurzen exponentiellen Backoff erneut versucht. Die folgenden Fehler lösen automatische Wiederholungen aus:
  • Verbindungsfehler (Netzwerkprobleme)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 500+ Internal errors
  • Timeouts
Konfigurieren Sie das Wiederholungsverhalten global oder pro Anfrage:
<?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],
);

Häufige Vorgänge

Erstellen einer Checkout-Sitzung

Erzeugen Sie eine Checkout-Sitzung:
$session = $client->checkoutSessions->create(
  productCart: [
    ["productID" => "prod_123", "quantity" => 1]
  ],
  returnUrl: "https://yourdomain.com/return"
);

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

Kunden verwalten

Erstellen und abrufen von Kundeninformationen:
// 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})";

Abonnements verwalten

Erstellen und Verwalten wiederkehrender Abonnements:
// Create a subscription
$subscription = $client->subscriptions->create(
  customerID: "cus_123",
  productID: "prod_456",
  priceID: "price_789"
);

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

Paginierung

Arbeiten Sie mit paginierten Listen-Antworten:
$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);
}

Fehlerbehandlung

Wenn die Bibliothek keine Verbindung zur API herstellen kann oder einen Statuscode ungleich Erfolg (4xx oder 5xx) zurückerhält, wird eine Unterklasse von APIException ausgelöst:
<?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();
}

Fehlertypen

UrsacheFehlertyp
HTTP 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
Andere HTTP-FehlerAPIStatusException
TimeoutAPITimeoutException
NetzwerkfehlerAPIConnectionException
Umschließen Sie API-Aufrufe stets mit try-catch-Blöcken, um potenzielle Fehler elegant zu behandeln und den Nutzern aussagekräftiges Feedback zu geben.

Erweiterte Nutzung

Undokumentierte Endpunkte

Stellen Sie Anfragen an undokumentierte Endpunkte:
<?php

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

Undokumentierte Parameter

Senden Sie undokumentierte Parameter an beliebige Endpunkte oder lesen Sie undokumentierte Antwortfelder aus:
<?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"],
  ],
);
Die extra*-Parameter mit demselben Namen überschreiben dokumentierte Parameter.

Framework-Integration

Laravel

Erstellen Sie einen Service für Laravel-Anwendungen:
<?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')
        );
    }
}
Fügen Sie die Konfiguration in config/services.php hinzu:
'dodo' => [
    'api_key' => env('DODO_API_KEY'),
    'environment' => env('DODO_ENVIRONMENT', 'sandbox')
],

Symfony

Erstellen Sie einen Service in 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
        );
    }
}
Registrieren Sie in config/services.yaml:
services:
  App\Service\DodoPaymentService:
    arguments:
      $apiKey: "%env(DODO_API_KEY)%"

Ressourcen

GitHub Repository

Sehen Sie sich den Quellcode an und leisten Sie einen Beitrag

API Reference

Vollständige API-Dokumentation

Discord Community

Holen Sie sich Hilfe und vernetzen Sie sich mit Entwicklern

Report Issues

Melden Sie Fehler oder fordern Sie Funktionen an

Support

Benötigen Sie Hilfe mit dem PHP SDK?

Beiträge

Wir freuen uns über Beiträge! Lesen Sie die Mitwirkungsrichtlinien, um zu beginnen.
Last modified on March 3, 2026