idoo / idoodev-sdk
SDK oficial de idoo.dev para creadores de APIs: verificación de la firma HMAC del gateway y contexto del consumidor.
Requires
- php: >=8.0
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
| Header | Contenido |
|---|---|
X-Idoo-Signature | HMAC-SHA256("{timestamp}.{body}", secret) en hexadecimal |
X-Idoo-Timestamp | Unix timestamp con el que se calculó la firma |
X-Idoo-Consumer-Id | Id del consumidor en idoo.dev |
X-Idoo-Ambiente | sandbox o produccion |
X-Idoo-Plan | Nombre del plan del consumidor |