JorgeAndrade\CFDI
Este paquete te permite generar los xml para la generacion de cfdi en mexico., (*1)
Introducción
CFDI te permite generar el xml para el proceso de timbrado de un CFDI (Comprobante Fiscal Digital por Internet), facturacion electronica en mexio, (*2)
Instalación
Simplemente instala el paquete con composer:, (*3)
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:, (*4)
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());
}
Uso
Crear un xml es extremadamente facil.
Si algo sale mal las funciones arrojaran una exception de tipo JorgeAndrade\Exceptions\CfdiException., (*5)
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, (*6)
Por el momento solo tenemos Factura como tipo de comprobante, esta en desarrollo: Nomina, Contabilidad., (*7)
$key = getcwd() . "/csds/AAD990814BP7.key.pem";
$cer = getcwd() . "/csds/AAD990814BP7.cer.pem";
$cfdi = new Cfdi(new Factura, $cer, $key);
Agregando datos
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 y receptor, (*8)
$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., (*9)
Emisor
$cfdi->add(
new EmisorData([
'rfc' => 'AAD990814BP7',
'nombre' => 'John Doe del Socorro',
])
);
Regimen Fiscal
$cfdi->add(
new RegimenFiscalData([
'Regimen' => 'Ley de pequeñas y medianas empresas',
])
);
Receptor
$cfdi->add(
new ReceptorData([
'rfc' => 'AAD990814BP7',
'nombre' => 'Jane Doe',
])
);
Domicilio Fiscal
$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'
);
Conceptos
$cfdi->add(
new ConceptosData([
'cantidad' => '1',
'unidad' => 'NO APLICA',
'descripcion' => 'Dominio .com',
'valorUnitario' => '2000.00',
'importe' => '2000.00',
])
);
Impuestos Trasladados
$cfdi->add(
new ImpuestosTrasladadosData([
'impuesto' => 'IVA',
'tasa' => '16.00',
'importe' => '320.00',
])
);
Impuestos Retenidos
$cfdi->add(
new ImpuestosRetenidosData([
'impuesto' => 'IVA',
'importe' => '320.00',
])
);
Crear xml
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, (*10)
Valores devueltos
La ruta del archivo o false en caso de error., (*11)
if ($xml = $cfdi->save($path)) {
echo 'Comprobante creado en: ' . $xml;
}
Todo list
- [ ] 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
Licencia
Csd programa de codigo abierto bajo la licencia MIT license, (*12)