Saltar al contenido principal
El SDK de PHP proporciona una forma robusta y flexible de integrar Dodo Payments en tus aplicaciones PHP. Construido siguiendo los estándares modernos de PHP con autoloading PSR-4, ofrece una amplia cobertura de pruebas y documentación detallada.
La biblioteca API de PHP de Dodo Payments está actualmente en beta. ¡Estamos emocionados de que lo pruebes! Por favor, comparte cualquier sugerencia, informe de errores o solicitud de características mediante presentando un problema.

Instalación

Instala el SDK usando Composer:
composer require "dodopayments/client:^3.5.0"
El SDK requiere PHP 8.1.0 o superior y Composer para la gestión de dependencias.

Inicio Rápido

Inicializa el cliente y crea una sesión de pago:
<?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);
Almacena tus claves API de forma segura utilizando variables de entorno. Nunca las expongas en tu código o las comites en el control de versiones.

Características Principales

Compatible con PSR-4

Sigue las Recomendaciones de Estándares de PHP para el desarrollo moderno de PHP

PHP Moderno

Construido para PHP 8.1+ con declaraciones de tipo y tipos estrictos

Pruebas Exhaustivas

Cobertura de pruebas integral para fiabilidad y estabilidad

Manejo de Excepciones

Tipos de excepciones claros para diferentes escenarios de error

Objetos de Valor

El SDK utiliza parámetros nombrados para especificar argumentos opcionales. Puedes inicializar objetos de valor utilizando el constructor estático with:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

// Recommended: Use static 'with' constructor with named parameters
$customer = AttachExistingCustomer::with(customerID: "customer_id");
Los constructores también están disponibles como un patrón alternativo:
<?php

use Dodopayments\Customers\AttachExistingCustomer;

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

Configuración

Configuración de Reintentos

Ciertos errores se reintentan automáticamente 2 veces por defecto con un breve retroceso exponencial. Los siguientes errores desencadenan reintentos automáticos:
  • Errores de conexión (problemas de conectividad de red)
  • 408 Tiempo de espera de solicitud
  • 409 Conflicto
  • 429 Límite de tasa
  • Errores internos 500+
  • Tiempos de espera
Configura el comportamiento de reintentos globalmente o por solicitud:
<?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),
);

Operaciones Comunes

Crear una Sesión de Pago

Genera una sesión de pago:
$session = $client->checkoutSessions->create(
  productCart: [
    ["productID" => "prod_123", "quantity" => 1]
  ],
  returnUrl: "https://yourdomain.com/return"
);

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

Gestionar Clientes

Crea y recupera información de clientes:
// 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})";

Manejar Suscripciones

Crea y gestiona suscripciones recurrentes:
// Create a subscription
$subscription = $client->subscriptions->create(
  customerID: "cus_123",
  productID: "prod_456",
  priceID: "price_789"
);

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

Paginación

Trabaja con respuestas de lista paginadas:
$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);
}

Manejo de Errores

Cuando la biblioteca no puede conectarse a la API o recibe un código de estado no exitoso (4xx o 5xx), se lanza una subclase de 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();
}

Tipos de Errores

CausaTipo de Error
HTTP 400BadRequestException
HTTP 401AuthenticationException
HTTP 403PermissionDeniedException
HTTP 404NotFoundException
HTTP 409ConflictException
HTTP 422UnprocessableEntityException
HTTP 429RateLimitException
HTTP >= 500InternalServerException
Otro error HTTPAPIStatusException
Tiempo de esperaAPITimeoutException
Error de redAPIConnectionException
Siempre envuelve las llamadas a la API en bloques try-catch para manejar posibles errores de manera elegante y proporcionar retroalimentación significativa a los usuarios.

Uso Avanzado

Puntos Finales No Documentados

Realiza solicitudes a puntos finales no documentados:
<?php

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

Parámetros No Documentados

Envía parámetros no documentados a cualquier punto final o lee propiedades de respuesta no documentadas:
<?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"],
  ),
);
Los parámetros extra* con el mismo nombre sobrescriben los parámetros documentados.

Integración con Frameworks

Laravel

Crea un servicio para aplicaciones 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')
        );
    }
}
Agrega configuración en config/services.php:
'dodo' => [
    'api_key' => env('DODO_API_KEY'),
    'environment' => env('DODO_ENVIRONMENT', 'sandbox')
],

Symfony

Crea un servicio en 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 en config/services.yaml:
services:
    App\Service\DodoPaymentService:
        arguments:
            $apiKey: '%env(DODO_API_KEY)%'

Recursos

Soporte

¿Necesitas ayuda con el SDK de PHP?

Contribuyendo

¡Damos la bienvenida a las contribuciones! Consulta las directrices de contribución para comenzar.