Este paquete te permite generar los xml para la generacion de cfdi en mexico.
CFDI te permite generar el xml para el proceso de timbrado de un CFDI (Comprobante Fiscal Digital por Internet), facturacion electronica en mexio
Simplemente instala el paquete con composer:
composer require jorgeandrade/cfdi
Una vez composer termine de instalar el paquete simplemente importa el paquete y crea una nueva instancia pasando los parametros correspondientes:
require 'vendor/autoload.php';
use JorgeAndrade\Cfdi;
use JorgeAndrade\ConceptosData;
use JorgeAndrade\DomicilioFiscalData;
use JorgeAndrade\EmisorData;
use JorgeAndrade\Exceptions\CfdiException;
use JorgeAndrade\Factura;
use JorgeAndrade\GeneralData;
use JorgeAndrade\ImpuestosTrasladadosData;
use JorgeAndrade\ImpuestosRetenidosData;
use JorgeAndrade\ReceptorData;
use JorgeAndrade\RegimenFiscalData;
$key = getcwd() . "/csds/AAD990814BP7.key.pem";
$cer = getcwd() . "/csds/AAD990814BP7.cer.pem";
$cfdi = new Cfdi(new Factura, $cer, $key);
try {
} catch (CfdiException $e) {
var_dump($e->getMessage());
}
Crear un xml es extremadamente facil.
Si algo sale mal las funciones arrojaran una exception de tipo JorgeAndrade\Exceptions\CfdiException
.
Crea una nueva instancia de Cfdi
y pasale los parametros correspondientes:
- tipo de comprobante: Factura;
new Factura
- cer: certificado en formato pem
- key: llave privada en formato pem
Por el momento solo tenemos Factura
como tipo de comprobante, esta en desarrollo: Nomina
, Contabilidad
.
$key = getcwd() . "/csds/AAD990814BP7.key.pem";
$cer = getcwd() . "/csds/AAD990814BP7.cer.pem";
$cfdi = new Cfdi(new Factura, $cer, $key);
Para agregar datos al xml, CFDI cuenta con un metodo llamado add
, pasando 2 posibles parametros:
- una instancia de algun objeto que extienda de CfdiData :
ConceptosData
,DomicilioFiscalData
,EmisorData
,GeneralData
,ImpuestosTrasladadosData
,ImpuestosRetenidosData
,ReceptorData
,RegimenFiscalData
- Valor obligatorio solo para establecer el Domicio fiscal del emisor o receptor, valores permitidos:
emisor
yreceptor
$cfdi->add(
new GeneralData([
'serie' => 'F',
'folio' => 1,
'fecha' => date("Y-m-d\TH:i:s"),
'formaDePago' => 'Pago en una sola Exhibición',
'noCertificado' => '20001000000200000293',
'subTotal' => '2000.00',
'Moneda' => 'MXN',
'total' => '2320.00',
'tipoDeComprobante' => 'ingreso',
'metodoDePago' => 'Efectivo',
'LugarExpedicion' => 'CD de Mexico',
'NumCtaPago' => 'No identificado',
]);
);
La informacion guardada en los objetos CfdiData debe ser del tipo (array)
, y estos deben ser acordes al anexo 20 del SAT.
$cfdi->add(
new EmisorData([
'rfc' => 'AAD990814BP7',
'nombre' => 'John Doe del Socorro',
])
);
$cfdi->add(
new RegimenFiscalData([
'Regimen' => 'Ley de pequeñas y medianas empresas',
])
);
$cfdi->add(
new ReceptorData([
'rfc' => 'AAD990814BP7',
'nombre' => 'Jane Doe',
])
);
$tipo = 'emisor'; //'emisor' o 'receptor'
$cfdi->add(
new DomicilioFiscalData([
'calle' => 'Insurgente',
'noExterior' => '600',
'colonia' => 'Centro',
'municipio' => 'CD de Mexico',
'estado' => 'Mexico',
'pais' => 'Mexico',
'codigoPostal' => '99000',
])
, 'emisor'
);
$cfdi->add(
new DomicilioFiscalData([
'calle' => 'Insurgente',
'noExterior' => '600',
'colonia' => 'Centro',
'municipio' => 'CD de Mexico',
'estado' => 'Mexico',
'pais' => 'Mexico',
'codigoPostal' => '99000',
])
, 'receptor'
);
$cfdi->add(
new ConceptosData([
'cantidad' => '1',
'unidad' => 'NO APLICA',
'descripcion' => 'Dominio .com',
'valorUnitario' => '2000.00',
'importe' => '2000.00',
])
);
$cfdi->add(
new ImpuestosTrasladadosData([
'impuesto' => 'IVA',
'tasa' => '16.00',
'importe' => '320.00',
])
);
$cfdi->add(
new ImpuestosRetenidosData([
'impuesto' => 'IVA',
'importe' => '320.00',
])
);
Paara generar el xml usaremos el metodo save
, pasando dos parametros:
- $path; requerido. La ruta donde se guardara el archivo:
getcwd(). '/xmls/'
; - $name; opcional. El nombre del xml: 'F1.xml'; Si este no se especifica el nombre seta tomado en base a la serie y el folio del xml si estan presentes, si no, se usara F y un numero aleatorio: F1234123431241.xml
La ruta del archivo o false
en caso de error.
if ($xml = $cfdi->save($path)) {
echo 'Comprobante creado en: ' . $xml;
}
- Tipo de comprobante: Nomina
- Tipo de comprobante: Contabilidad
- Tipo de datos: Adendas
- Tipo de datos: Complementos
- Tipo de datos: Percepciones
- Tipo de datos: Deducciones
- Tipo de datos: Horas extras
- Tipo de datos: Incapacidades
Csd programa de codigo abierto bajo la licencia MIT license