1. Go to this page and download the library: Download ecuafact/sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ecuafact / sdk example snippets
use Ecuafact\Sdk\Contracts\ComprobanteRequest;
use Ecuafact\Sdk\Contracts\InfoTributaria;
use Ecuafact\Sdk\EcuafactClient;
use Ecuafact\Sdk\EcuafactClientOptions;
// Sin argumentos, el SDK lee ECUAFACT_API_KEY y ECUAFACT_BASE_URL del entorno.
$client = new EcuafactClient(new EcuafactClientOptions(
identificacion: '0123456789', // solo integraciones de un contribuyente
));
$comprobante = new ComprobanteRequest();
$comprobante->origenReferencia = 'MiERP';
$comprobante->referenciaExterna = 'FACTURA-2026-0001';
$comprobante->infoTributaria = new InfoTributaria();
$comprobante->infoTributaria->ruc = '0123456789001'; // identificacionCompleta de GET /v1/contexto
$comprobante->infoTributaria->codDoc = '01';
$comprobante->infoTributaria->estab = '002';
$comprobante->infoTributaria->ptoEmi = '001';
// $comprobante->info = ...; $comprobante->detalles = [...];
$resultado = $client->emitir($comprobante); // 202: admitido, no autorizado todavia
$operacion = $client->esperarResultado($resultado->admission->idOperacion);
if ($operacion->esFinal() && $operacion->esAutorizado()) {
echo $operacion->claveAcceso . PHP_EOL;
}
use Ecuafact\Sdk\RequestOptions;
$opciones = new RequestOptions(
timeout: 20.0, // por intento; reemplaza al timeout del cliente
totalTimeout: 45.0, // tope de la llamada, incluidos reintentos
correlationId: 'PED-2026-0457', // cabecera X-Correlation-Id: 1-64 de A-Z a-z 0-9 . _ -
reintentos: true, // false: sin reintentos en esta llamada
);
$resultado = $client->emitirEn('0123456789', $comprobante, 'FACTURA-2026-0001', $opciones);
echo $resultado->correlationId; // la correlacion que devolvio el API
use Ecuafact\Sdk\Builders\ComprobanteBuilder;
use Ecuafact\Sdk\Builders\Iva;
use Ecuafact\Sdk\Builders\Tarifa;
$builder = ComprobanteBuilder::factura('0123456789001', '002', '001')
->referencias('MiERP', 'FACTURA-2026-0001')
->fechaEmision('07/10/2026')
->comprador('05', '0123456789', 'CONTRIBUYENTE DE PRUEBAS')
->linea('SERV-001', 'CONSULTORIA', 3, '12.50', '2.50', Iva::TARIFA_15)
->linea('PRD-ICE-01', 'PRODUCTO CON ICE', 1, '100.00', 0, Iva::TARIFA_15, Tarifa::ice('3011', 10))
->pago('01') // sin total: recibe lo que falta del importeTotal
->calcularTotales(); // opcional: rellena solo lo que esta vacio
$inconsistencias = $builder->validar(); // Inconsistencia[] {campo, mensaje, esperado, actual}; no lanza
$resultado = $client->emitirEn('0123456789', $builder->construir(), 'FACTURA-2026-0001');
use Ecuafact\Sdk\ListadoRequest;
$filtros = (new ListadoRequest())->desde(new DateTimeImmutable('2026-10-01'))->hasta('2026-10-07');
foreach ($client->iterarEmitidosEn('0123456789', $filtros) as $comprobante) {
echo $comprobante->claveAcceso . PHP_EOL;
}
use Ecuafact\Sdk\Contracts\TipoEventoWebhook;
use Ecuafact\Sdk\EcuafactWebhookException;
use Ecuafact\Sdk\WebhookSignature;
$cuerpo = file_get_contents('php://input');
try {
// Uno o varios secretos (rotacion); tolerancia por defecto 300 s.
$evento = WebhookSignature::construirEvento([$secretoActual, $secretoAnterior],
$_SERVER['HTTP_ECUAFACT_SIGNATURE'] ?? '', $cuerpo);
} catch (EcuafactWebhookException) {
http_response_code(400);
return;
}
if ($evento->eventType === TipoEventoWebhook::DocumentoAutorizado) {
// $evento->idOperacion, $evento->claveAcceso
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.