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.
Die Dodo Payments PHP API-Bibliothek befindet sich derzeit in Beta. Wir freuen uns darauf, dass Sie damit experimentieren! Bitte teilen Sie uns Vorschläge, Fehlerberichte oder Feature-Anfragen mit, indem Sie ein Problem melden.

Installation

Installieren Sie das SDK mit Composer:
composer require "dodopayments/client:^3.5.0"
Das SDK erfordert PHP 8.1.0 oder höher und Composer für das Abhängigkeitsmanagement.

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);
Bewahren Sie Ihre API-Schlüssel sicher in Umgebungsvariablen auf. Stellen Sie sie niemals in Ihrem Code oder in der Versionskontrolle zur Verfügung.

Kernfunktionen

PSR-4-konform

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

Modernes PHP

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

Umfassende Tests

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

Fehlerbehandlung

Klare Ausnahmetypen für verschiedene Fehlerszenarien

Wertobjekte

Das SDK verwendet benannte Parameter, um optionale Argumente anzugeben. Sie können Wertobjekte 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 auch 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 2 Mal automatisch mit einer kurzen exponentiellen Rückoff-Zeit wiederholt. Die folgenden Fehler lösen automatische Wiederholungen aus:
  • Verbindungsfehler (Netzwerkverbindungsprobleme)
  • 408 Anfragezeitüberschreitung
  • 409 Konflikt
  • 429 Ratenlimit
  • 500+ Interne Fehler
  • Zeitüberschreitungen
Konfigurieren Sie das Wiederholungsverhalten global oder pro Anfrage:
<?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),
);

Häufige Operationen

Erstellen einer Checkout-Sitzung

Generieren 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: "[email protected]",
  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 Sie wiederkehrende 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 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 Nicht-Erfolgsstatuscode (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
ZeitüberschreitungAPITimeoutException
NetzwerkfehlerAPIConnectionException
Umhüllen Sie API-Aufrufe immer in try-catch-Blöcken, um potenzielle Fehler elegant zu behandeln und den Benutzern sinnvolles 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 jeden Endpunkt oder lesen Sie undokumentierte Antwortattribute:
<?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"],
  ),
);
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')
        );
    }
}
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 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
        );
    }
}
Registrieren Sie in config/services.yaml:
services:
    App\Service\DodoPaymentService:
        arguments:
            $apiKey: '%env(DODO_API_KEY)%'

Ressourcen

Unterstützung

Brauchen Sie Hilfe mit dem PHP SDK?

Mitwirken

Wir freuen uns über Beiträge! Überprüfen Sie die Mitwirkungsrichtlinien, um loszulegen.