Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt

Use this file to discover all available pages before exploring further.

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 6.7.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:
use Dodopayments\Customers\AttachExistingCustomer;
use Dodopayments\Payments\BillingAddress;

// Create a subscription
$subscription = $client->subscriptions->create(
  billing: BillingAddress::with(
    country: 'US',
    city: 'San Francisco',
    state: 'CA',
    street: '1 Market St',
    zipcode: '94105',
  ),
  customer: AttachExistingCustomer::with(customerID: 'cus_123'),
  productID: 'pdt_456',
  quantity: 1,
);

// Charge an on-demand subscription
// productPrice is in the lowest currency denomination (e.g., 2500 = $25.00 USD)
$charge = $client->subscriptions->charge(
  $subscription->subscription_id,
  productPrice: 2500,
);
billing benötigt mindestens den zweistelligen ISO country-Code. Übergeben Sie AttachExistingCustomer::with(customerID: '...'), um einen bestehenden Kunden zu verknüpfen, oder NewCustomer::with(email: '...', name: '...'), um einen zu erstellen. productPrice ist in der kleinsten Währungseinheit.

Paginierung

Arbeiten mit paginierten Listenantworten:
$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) erhä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
Anderer HTTP-FehlerAPIStatusException
TimeoutAPITimeoutException
NetzwerkfehlerAPIConnectionException
API-Aufrufe immer in try-catch-Blöcken einbetten, um potenzielle Fehler elegant zu behandeln und den Benutzern aussagekräftiges Feedback zu geben.

Erweiterte Nutzung

Undokumentierte Endpunkte

Anfragen an undokumentierte Endpunkte stellen:
<?php

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

Undokumentierte Parameter

Undokumentierte Parameter an jeden Endpunkt senden oder undokumentierte Antwort-Eigenschaften lesen:
<?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 Dienst 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')
        );
    }
}
Konfiguration in config/services.php hinzufügen:
'dodo' => [
    'api_key' => env('DODO_API_KEY'),
    'environment' => env('DODO_ENVIRONMENT', 'sandbox')
],

Symfony

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

Ressourcen

GitHub Repository

Quellcode anzeigen und beitragen

API Reference

Vollständige API-Dokumentation

Discord Community

Hilfe erhalten und mit Entwicklern verbinden

Report Issues

Fehler melden oder Funktionen anfordern

Unterstützung

Brauchen Sie Hilfe mit dem PHP SDK?

Beitrag leisten

Wir begrüßen Beiträge! Lesen Sie die Beitragsrichtlinien, um loszulegen.
Last modified on May 14, 2026