Skip to content

Repository files navigation

CFDI

Última versión Tests PHP Licencia

Construye y sella CFDI 4.0 sobre el ecosistema phpcfdi/eclipxe, y timbra detrás de un driver de PAC intercambiable.

Un núcleo independiente de framework con un puente opcional para Laravel (configuración, facade).

use Webrek\Cfdi\Laravel\Facades\Cfdi;
use Webrek\Cfdi\Csd;

$creator = Cfdi::comprobante([
    'Serie' => 'A', 'Folio' => '1001', 'Fecha' => now()->format('Y-m-d\TH:i:s'),
    'FormaPago' => '01', 'Moneda' => 'MXN', 'TipoDeComprobante' => 'I',
    'Exportacion' => '01', 'MetodoPago' => 'PUE', 'LugarExpedicion' => '06000',
]);

$comprobante = $creator->comprobante();
$comprobante->addEmisor(['RegimenFiscal' => '601']);              // RFC/Nombre se toman del CSD al sellar
$comprobante->addReceptor([
    'Rfc' => 'XAXX010101000', 'Nombre' => 'PUBLICO EN GENERAL',
    'DomicilioFiscalReceptor' => '06000', 'RegimenFiscalReceptor' => '616', 'UsoCFDI' => 'S01',
]);
$comprobante->addConcepto([
    'ClaveProdServ' => '01010101', 'Cantidad' => '1', 'ClaveUnidad' => 'H87',
    'Descripcion' => 'Servicio', 'ValorUnitario' => '100.00', 'Importe' => '100.00', 'ObjetoImp' => '01',
]);

$resultado = Cfdi::issue($creator, app(Csd::class));   // sella + timbra
$resultado->uuid;   // folio fiscal
$resultado->xml;    // CFDI timbrado

Qué hace y qué no. Arma el CFDI 4.0 y lo sella con tu CSD (lo difícil y verificable). El timbrado lo realiza tu PAC a través de un driver — el paquete trae uno falso para desarrollo. No valida el comprobante contra el SAT ni reemplaza las reglas de negocio de tu facturación. El algoritmo de sellado está verificado contra el CSD de pruebas del SAT.

Instalación

composer require webrek/cfdi

Requiere las extensiones dom, xsl y openssl (para la cadena de origen y el sellado).

En Laravel

El service provider se descubre solo. Publica la configuración y apunta tu CSD:

php artisan vendor:publish --tag=cfdi-config
CFDI_CSD_CER=/ruta/csd.cer
CFDI_CSD_KEY=/ruta/csd.key
CFDI_CSD_PASSWORD=...
CFDI_PAC=App\Cfdi\MiPac          # tu driver de PAC (por defecto: el falso)
CFDI_XSLT_CACHE=/ruta/persistente # caché de los XSLT del SAT

En cualquier otro lado

use Webrek\Cfdi\{Sealer, Csd};

$csd = Csd::fromFiles('csd.cer', 'csd.key', 'contraseña');
$sealed = (new Sealer)->seal($creator, $csd);   // $creator es un CfdiUtils\CfdiCreator40

$resultado = (new MiPac)->stamp($sealed->xml);

El driver de PAC

El timbrado vive detrás de una interfaz para que conectes tu proveedor (Finkok, SW, etc.):

use Webrek\Cfdi\Contracts\Pac;
use Webrek\Cfdi\StampResult;

final class MiPac implements Pac
{
    public function stamp(string $sealedXml): StampResult
    {
        // …llama al web service de tu PAC con $sealedXml…
        return new StampResult($uuid, $xmlTimbrado, $respuestaCruda);
    }
}

Webrek\Cfdi\Pacs\FakePac (el default) devuelve el XML sellado con un UUID generado, para que tus pruebas ejerciten el flujo sin contactar a un PAC real.

La cadena de origen (XSLT del SAT)

El sellado construye la cadena de origen con los XSLT del SAT. La primera vez se descargan y se cachean; configura CFDI_XSLT_CACHE a una ruta persistente y escribible en producción para no volver a bajarlos.

Pruebas

composer test

La suite del núcleo sella un CFDI 4.0 con el CSD de pruebas del SAT (RFC AAA010101AAA) usando los XSLT incluidos en tests/fixtures, así que corre sin red.

Contribuir

Consulta CONTRIBUTING.md. Corre make check antes de abrir un pull request.

Seguridad

Reporta vulnerabilidades a través del formulario de avisos de seguridad, no como issues públicos. Consulta SECURITY.md.

Licencia

Licencia MIT (MIT). Consulta LICENSE.

About

Build and seal Mexican CFDI 4.0 over phpcfdi/eclipxe, with stamping behind a pluggable PAC driver. Framework-agnostic core with an optional Laravel bridge.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages