PHPackages                             jorgeandrade/cfdi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. jorgeandrade/cfdi

Abandoned → [https://github.com/feimx/cdfi](/?search=https%3A%2F%2Fgithub.com%2Ffeimx%2Fcdfi)Library[Utility &amp; Helpers](/categories/utility)

jorgeandrade/cfdi
=================

Paquete para generar xml para cfdi 3.2

2131[1 issues](https://github.com/Yorchi/cfdi/issues)PHP

Since Mar 15Pushed 8y ago1 watchersCompare

[ Source](https://github.com/Yorchi/cfdi)[ Packagist](https://packagist.org/packages/jorgeandrade/cfdi)[ RSS](/packages/jorgeandrade-cfdi/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (1)Used By (0)

JorgeAndrade\\CFDI
==================

[](#jorgeandradecfdi)

Este paquete te permite generar los xml para la generacion de cfdi en mexico.

- [Introducción](#introduccion)
- [Instalación](#instalacion)
- [Uso](#uso)
    - [Agregando datos](#agregando-datos)
    - [Emisor](#emisor)
    - [Regimen Fiscal](#regimen-fiscal)
    - [Receptor](#receptor)
    - [Domicilio Fiscal](#domicilio-fiscal)
    - [Conceptos](#conceptos)
    - [Impuestos Trasladados](#impuestos-trasladados)
    - [Impuestos Retenidos](#impuestos-retenidos)
    - [Crear xml](#crear-xml)
    - [Todo list](#todo-list)
- [Licencia](#licencia)

Introducción
------------

[](#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

Instalación
-----------

[](#instalación)

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());
}
```

Uso
---

[](#uso)

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);
```

Agregando datos
---------------

[](#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`

```
$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.

Emisor
------

[](#emisor)

```
$cfdi->add(
  new EmisorData([
      'rfc' => 'AAD990814BP7',
      'nombre' => 'John Doe del Socorro',
  ])
);
```

Regimen Fiscal
--------------

[](#regimen-fiscal)

```
$cfdi->add(
  new RegimenFiscalData([
    'Regimen' => 'Ley de pequeñas y medianas empresas',
  ])
);
```

Receptor
--------

[](#receptor)

```
$cfdi->add(
  new ReceptorData([
    'rfc' => 'AAD990814BP7',
    'nombre' => 'Jane Doe',
  ])
);
```

Domicilio Fiscal
----------------

[](#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
---------

[](#conceptos)

```
$cfdi->add(
  new ConceptosData([
    'cantidad' => '1',
    'unidad' => 'NO APLICA',
    'descripcion' => 'Dominio .com',
    'valorUnitario' => '2000.00',
    'importe' => '2000.00',
  ])
);
```

Impuestos Trasladados
---------------------

[](#impuestos-trasladados)

```
$cfdi->add(
  new ImpuestosTrasladadosData([
    'impuesto' => 'IVA',
    'tasa' => '16.00',
    'importe' => '320.00',
  ])
);
```

Impuestos Retenidos
-------------------

[](#impuestos-retenidos)

```
$cfdi->add(
  new ImpuestosRetenidosData([
    'impuesto' => 'IVA',
    'importe' => '320.00',
  ])
);
```

Crear xml
---------

[](#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**

#### Valores devueltos

[](#valores-devueltos)

La ruta del archivo o `false` en caso de error.

```
if ($xml = $cfdi->save($path)) {
  echo 'Comprobante creado en: ' . $xml;
}
```

### Todo list

[](#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
--------

[](#licencia)

Csd programa de codigo abierto bajo la licencia [MIT license](http://opensource.org/licenses/MIT)

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance10

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/5d0f7ef298a8212f962af789337d790ba61cf2d849609c66618ec86ad2422bb7?d=identicon)[Yorchi](/maintainers/Yorchi)

---

Top Contributors

[![Yorchi](https://avatars.githubusercontent.com/u/4969895?v=4)](https://github.com/Yorchi "Yorchi (5 commits)")

### Embed Badge

![Health badge](/badges/jorgeandrade-cfdi/health.svg)

```
[![Health](https://phpackages.com/badges/jorgeandrade-cfdi/health.svg)](https://phpackages.com/packages/jorgeandrade-cfdi)
```

###  Alternatives

[gerardojbaez/laraplans

SaaS style recurring plans for Laravel.

17917.8k1](/packages/gerardojbaez-laraplans)[kunstmaan/tagging-bundle

Uses FabienPennequin/DoctrineExtensions-Taggable to add tagging to the Kunstmaan bundles

101.4k1](/packages/kunstmaan-tagging-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
