Looking to hire Laravel developers? Try LaraJobs

laravel maintained by sifadi

Description
Integración de Sifadi para Laravel: ServiceProvider, Facade y config sobre el SDK sifadi/core (timbra CFDI 4.0 por API).
Author
Last update
2026/10/13 01:26 (dev-main)
License
Downloads
1

Comments
comments powered by Disqus

sifadi/laravel

🇲🇽 Made for Mexico — read this first. This is the official Laravel integration for Sifadi, a Mexican electronic-invoicing service (CFDI 4.0 / SAT). It exists exclusively to issue tax invoices in Mexico, so its documentation, examples and field names are written in Spanish on purpose — that is the language of the SAT and of the Mexican businesses and developers who use it. If you are not issuing Mexican CFDI, this package is not for you.


Integración de Sifadi para Laravel: un ServiceProvider, una Facade Sifadi y un config/sifadi.php sobre el SDK sifadi/core. Timbra CFDI 4.0, cancela, descarga XML/PDF y consulta tu saldo — desde Laravel, con cero boilerplate.

Requisitos

  • PHP 8.1 o superior
  • Laravel 10, 11 o 12
  • Un token de Sifadi: access token de OAuth ("Conectar con Sifadi") o una API key personal (Sifadi → Ajustes → API Keys).

Instalación

composer require sifadi/laravel

El ServiceProvider y la Facade se registran solos (package auto-discovery). Publica la config solo si quieres editarla:

php artisan vendor:publish --tag=sifadi-config

Configuración

En tu .env:

SIFADI_TOKEN=tu_access_token_o_api_key

# Opcionales — por defecto apunta a producción:
# SIFADI_BASE_URL=https://app.sifadi.test
# SIFADI_TIMEOUT=30

Cómo usarlo

Con la Facade

use Sifadi\Laravel\Facades\Sifadi;

$cfdi = Sifadi::invoices()->create([
    'tipo_de_comprobante' => 'I',
    'exportacion' => '01',
    'forma_pago' => '01',
    'metodo_pago' => 'PUE',
    'moneda' => 'MXN',
    'emisor' => ['rfc' => 'EKU9003173C9'],
    'receptor' => [
        'rfc' => 'XAXX010101000',
        'nombre' => 'PUBLICO EN GENERAL',
        'domicilio_fiscal_receptor' => '66039',
        'regimen_fiscal_receptor' => '616',
        'uso_cfdi' => 'S01',
    ],
    'conceptos' => [[
        'clave_prod_serv' => '01010101',
        'clave_unidad' => 'ACT',
        'cantidad' => '1',
        'descripcion' => 'Venta',
        'valor_unitario' => '589.00',
        'objeto_imp' => '02',
        'traslados' => [['impuesto' => '002', 'tipo_factor' => 'Tasa', 'tasa_o_cuota' => '0.160000']],
    ]],
]);

$xml = Sifadi::invoices()->xml($cfdi['id']);
$saldo = Sifadi::stamps()->balance();

Con inyección de dependencias

use Sifadi\Core\SifadiClient;

public function store(SifadiClient $sifadi)
{
    $cfdi = $sifadi->invoices()->create([/* ... */]);
}

Métodos disponibles

Sifadi::invoices()->create([...]);      // crear + timbrar  (idempotencyKey opcional)
Sifadi::invoices()->createDraft([...]); // borrador (sin timbrar)
Sifadi::invoices()->sign($id);
Sifadi::invoices()->stamp($id);
Sifadi::invoices()->cancel($id, '02');  // motivo 01 requiere uuid_sustitucion
Sifadi::invoices()->stampInfo($id);
Sifadi::invoices()->xml($id);           // Sifadi::invoices()->pdf($id);
Sifadi::issuers()->list();              // RFCs de la cuenta
Sifadi::stamps()->balance();            // Sifadi::stamps()->available();
Sifadi::me();                           // identidad + plan del token

Manejo de errores

Las excepciones viven en sifadi/core y son tipadas por código HTTP:

use Sifadi\Core\Exceptions\ValidationException;
use Sifadi\Core\Exceptions\InsufficientStampsException;

try {
    $cfdi = Sifadi::invoices()->create($document);
} catch (ValidationException $e) {
    foreach ($e->errors() as $campo => $mensajes) { /* ... */ }
} catch (InsufficientStampsException $e) {
    // recarga timbres. $e->available(), $e->required()
}
Excepción HTTP
AuthenticationException 401
InsufficientStampsException 402
AuthorizationException 403
NotFoundException 404
ConflictException 409
ValidationException 422
RateLimitException 429
PacException 502
ConnectionException —

El document shape del CFDI (claves en español/SAT) y el detalle de cada método están documentados en el README de sifadi/core.

Pruebas

composer install
composer test   # PHPUnit + Orchestra Testbench
composer lint   # Laravel Pint

Licencia

MIT.