Vai al contenuto principale

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.

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 6.7.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:
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 richiede almeno il codice ISO a due lettere country. Passa AttachExistingCustomer::with(customerID: '...') per collegare un cliente esistente, o NewCustomer::with(email: '...', name: '...') per crearne uno. productPrice è nella denominazione valutaria più bassa.

Paginazione

Lavora con le risposte dell’elenco paginato:
$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 può connettersi all’API o riceve un codice di stato non di successo (4xx o 5xx), viene lanciata 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 i potenziali errori con grazia e fornire feedback significativi agli utenti.

Uso Avanzato

Endpoint Non Documentati

Effettua richieste agli 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 le proprietà della 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 del Framework

Laravel

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

Risorse

GitHub Repository

Visualizza il codice sorgente e contribuisci

API Reference

Documentazione completa dell’API

Discord Community

Ottieni aiuto e connettiti con gli sviluppatori

Report Issues

Segnala bug o richiedi funzionalità

Supporto

Hai bisogno di aiuto con l’SDK PHP?

Contribuire

Accettiamo contributi! Consulta le linee guida per i contributi per iniziare.
Last modified on May 14, 2026