Vai al contenuto principale
L’SDK PHP fornisce un modo robusto e flessibile per integrare Dodo Payments nelle tue applicazioni PHP. Costruito seguendo gli standard PHP moderni con autoloading PSR-4, offre una copertura di test estesa e documentazione dettagliata.

Installazione

Installa l’SDK usando Composer:
composer require "dodopayments/client 5.8.1"
L’SDK richiede PHP 8.1.0 o superiore e Composer per la gestione delle dipendenze.

Avvio rapido

Inizializza il client e crea una sessione di checkout:
<?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);
Conserva le chiavi API in modo sicuro usando variabili d’ambiente. Non esporle mai nel tuo codice o non committarle nel controllo versione.

Funzionalità principali

PSR-4 Compliant

Segue le PHP Standards Recommendations per lo sviluppo PHP moderno

Modern PHP

Progettato per PHP 8.1+ con dichiarazioni di tipo e strict types

Extensive Testing

Copertura completa dei test per affidabilità e stabilità

Exception Handling

Tipi di eccezione chiari per scenari di errore diversi

Oggetti di valore

L’SDK utilizza parametri nominati per specificare argomenti opzionali. Puoi inizializzare gli oggetti di valore usando il costruttore statico with:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

// Recommended: Use static 'with' constructor with named parameters
$customer = AttachExistingCustomer::with(customerID: "customer_id");
Sono disponibili anche builder come pattern alternativo:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

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

Configurazione

Configurazione dei tentativi

Alcuni errori vengono riprovati automaticamente 2 volte per impostazione predefinita con un breve backoff esponenziale. I seguenti errori attivano il ripristino automatico:
  • Errori di connessione (problemi di connettività di rete)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 500+ Errori interni
  • Timeout
Configura il comportamento dei tentativi globalmente o per singola richiesta:
<?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],
);

Operazioni comuni

Crea una sessione di checkout

Genera una sessione di checkout:
$session = $client->checkoutSessions->create(
  productCart: [
    ["productID" => "prod_123", "quantity" => 1]
  ],
  returnUrl: "https://yourdomain.com/return"
);

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

Gestisci clienti

Crea e recupera informazioni sui clienti:
// 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})";

Gestisci abbonamenti

Crea e gestisci abbonamenti ricorrenti:
// Create a subscription
$subscription = $client->subscriptions->create(
  customerID: "cus_123",
  productID: "prod_456",
  priceID: "price_789"
);

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

Paginazione

Lavora con risposte a lista paginata:
$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);
}

Gestione degli errori

Quando la libreria non riesce a connettersi all’API o riceve un codice di stato non di successo (4xx o 5xx), viene sollevata una sottoclasse di 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();
}

Tipi di errore

CausaTipo di errore
HTTP 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
Altro errore HTTPAPIStatusException
TimeoutAPITimeoutException
Errore di reteAPIConnectionException
Avvolgi sempre le chiamate API in blocchi try-catch per gestire eventuali errori in modo elegante e fornire feedback significativi agli utenti.

Utilizzo avanzato

Endpoint non documentati

Effettua richieste ad endpoint non documentati:
<?php

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

Parametri non documentati

Invia parametri non documentati a qualsiasi endpoint o leggi proprietà di risposta non documentate:
<?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"],
  ],
);
I parametri extra* con lo stesso nome sovrascrivono i parametri documentati.

Integrazione con i framework

Laravel

Crea un servizio per applicazioni 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')
        );
    }
}
Aggiungi la configurazione in config/services.php:
'dodo' => [
    'api_key' => env('DODO_API_KEY'),
    'environment' => env('DODO_ENVIRONMENT', 'sandbox')
],

Symfony

Crea un servizio 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
        );
    }
}
Registralo in config/services.yaml:
services:
  App\Service\DodoPaymentService:
    arguments:
      $apiKey: "%env(DODO_API_KEY)%"

Risorse

Supporto

Hai bisogno di aiuto con l’SDK PHP?

Contribuire

Accogliamo contributi! Consulta le linee guida per i contributi per iniziare.