idoo/idoodev-sdk

SDK oficial de idoo.dev para creadores de APIs: verificación de la firma HMAC del gateway y contexto del consumidor.

Maintainers

Package info

gitlab.idoo.mx/publico/idoo-sdk-php

pkg:composer/idoo/idoodev-sdk

Transparency log

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

v1.0.0 2026-07-25 22:05 UTC

This package is auto-updated.

Last update: 2026-07-25 22:45:33 UTC


README

Verifica en tu backend que cada petición proviene realmente del gateway de idoo.dev y accede al contexto del consumidor (id, plan, ambiente). Sin dependencias; PHP 8.0+.

Instalación

Con Composer (recomendado):

composer require idoo/idoodev-sdk

Sin Composer — copia src/Peticion.php a tu proyecto y haz require:

require __DIR__ . '/Peticion.php';

Uso básico (PHP puro)

Al inicio de tu endpoint:

use IdooDev\Peticion;

$peticion = Peticion::desdeGlobals('TU_HMAC_SECRET'); // del panel de creador
$peticion->requerir(); // responde 401 y termina si la firma no es válida

// A partir de aquí la petición es legítima:
$consumidorId = $peticion->consumidorId(); // int — id del consumidor en idoo.dev
$plan         = $peticion->plan();         // "Free", "Pro", ...
$ambiente     = $peticion->ambiente();     // "sandbox" | "produccion"
$datos        = $peticion->json();         // body decodificado (o null)

requerir() valida la firma HMAC-SHA256 (X-Idoo-Signature sobre timestamp.body) y que el timestamp tenga menos de 5 minutos (configurable con el segundo argumento de desdeGlobals).

Si prefieres manejar el rechazo tú mismo, usa firmaValida(): bool en lugar de requerir().

Sandbox vs producción

El gateway te reenvía el ambiente de la key del consumidor. Úsalo para separar datos de prueba:

$tabla = $peticion->esSandbox() ? 'sandbox_pedidos' : 'pedidos';

Laravel / frameworks

Construye la petición desde el request del framework con desdeValores:

// app/Http/Middleware/VerificarIdooDev.php
public function handle(Request $request, Closure $next)
{
    $peticion = \IdooDev\Peticion::desdeValores(
        config('services.idoodev.secret'),
        $request->headers->all() ? array_map(fn ($v) => $v[0], $request->headers->all()) : [],
        $request->getContent()
    );

    abort_unless($peticion->firmaValida(), 401, 'Firma de idoo.dev inválida');

    $request->attributes->set('idoo_consumidor', $peticion->consumidorId());
    $request->attributes->set('idoo_ambiente', $peticion->ambiente());
    return $next($request);
}

Pruebas locales

Para simular al gateway en tus pruebas, firma tú mismo la petición:

$timestamp = (string) time();
$body      = '{"hola":"mundo"}';
$firma     = hash_hmac('sha256', $timestamp . '.' . $body, 'TU_HMAC_SECRET');

$peticion = \IdooDev\Peticion::desdeValores('TU_HMAC_SECRET', [
    'X-Idoo-Signature'   => $firma,
    'X-Idoo-Timestamp'   => $timestamp,
    'X-Idoo-Consumer-Id' => '42',
    'X-Idoo-Ambiente'    => 'sandbox',
    'X-Idoo-Plan'        => 'Free',
], $body);

assert($peticion->firmaValida());

Referencia de headers del gateway

HeaderContenido
X-Idoo-SignatureHMAC-SHA256("{timestamp}.{body}", secret) en hexadecimal
X-Idoo-TimestampUnix timestamp con el que se calculó la firma
X-Idoo-Consumer-IdId del consumidor en idoo.dev
X-Idoo-Ambientesandbox o produccion
X-Idoo-PlanNombre del plan del consumidor