PHPackages                             kinedu/cfdi-xml - 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. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. kinedu/cfdi-xml

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

kinedu/cfdi-xml
===============

Librería para generar la estructura XML de los Comprobantes Fiscales (CFDI)

v0.2.0(4y ago)171.2k7MITPHPPHP ^7.3|^8.0

Since Feb 6Pushed 4y ago7 watchersCompare

[ Source](https://github.com/Kinedu/cfdi-xml)[ Packagist](https://packagist.org/packages/kinedu/cfdi-xml)[ Docs](https://github.com/Kinedu/cfdi-xml)[ RSS](/packages/kinedu-cfdi-xml/feed)WikiDiscussions master Synced today

READMEChangelog (8)Dependencies (1)Versions (9)Used By (0)

[![Kinedu](https://raw.githubusercontent.com/Kinedu/cfdi-xml/gh-pages/assets/img/logo.png)](https://raw.githubusercontent.com/Kinedu/cfdi-xml/gh-pages/assets/img/logo.png)
===========================================================================================================================================================================

[](#)

[![Travis](https://camo.githubusercontent.com/74fad2edca7f294f33e4a584502932997857b476d040b384db47c9c9bd98a7e8/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f4b696e6564752f636664692d786d6c2e7376673f7374796c653d666c61742d737175617265)](https://travis-ci.org/Kinedu/cfdi-xml)[![StyleCI](https://camo.githubusercontent.com/0f7db3814b0aa586aa7a58c6823a25210e9cb5dff1f410415c235f02537176a6/68747470733a2f2f7374796c6563692e696f2f7265706f732f3131383138363938312f736869656c643f6272616e63683d6d6173746572)](https://styleci.io/repos/118186981)[![Quality Score](https://camo.githubusercontent.com/d0277908b07f3c1b2dcdab811572d3b3db4cf2cf7b3b6225b36eafa321d2645c/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f4b696e6564752f636664692d786d6c2e7376673f7374796c653d666c61742d737175617265)](https://scrutinizer-ci.com/g/Kinedu/cfdi-xml)[![Total Downloads](https://camo.githubusercontent.com/d880b80a50f434fca9f86ff838a125258dc98ac59db07dd0b2d1efb19e3135b6/68747470733a2f2f706f7365722e707567782e6f72672f6b696e6564752f636664692d786d6c2f646f776e6c6f6164733f666f726d61743d666c61742d737175617265)](https://packagist.org/packages/kinedu/cfdi-xml)[![License](https://camo.githubusercontent.com/3a18d5479e267d9f616953ded46a1c85177d78ae0e65962411bc92b5e06dea80/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6b696e6564752f636664692d786d6c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/kinedu/cfdi-xml)

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

[](#instalación)

Instalar el paquete mediante [Composer](https://getcomposer.org/).

```
composer require kinedu/cfdi-xml
```

Uso
---

[](#uso)

- [Factura](#factura)
    - [CFDI](#cfdi)
    - [Obtener XML](#obtener-xml)
    - [Guardar CFDI](#guardar-cfdi)
- [Nodos](#nodos)
    - [Relacionado](#relacionado)
    - [Emisor](#emisor)
    - [Receptor](#receptor)
    - [Impuestos](#impuestos)
    - [Concepto](#concepto)
    - [Parte](#parte)
    - [Información Aduanera](#informaci%C3%B3n-aduanera)

### Factura

[](#factura)

- [CFDI](#cfdi)
- [Obtener XML](#obtener-xml)
- [Guardar CFDI](#guardar-cfdi)

#### CFDI

[](#cfdi)

```
use Kinedu\CfdiXML\CFDI;

$key = 'AAA010101AAA.key.pem';
$cer = 'AAA010101AAA.cer.pem';

$cfdi = new CFDI([
    'Serie' => 'A',
    'Folio' => 'A0103',
    'Fecha' => '2018-02-01T10:00:00',
    'FormaPago' => '01',
    'NoCertificado' => '3000100000300023708',
    'SubTotal' => '4741.38',
    'Moneda' => 'MXN',
    'TipoCambio' => '1',
    'Total' => '5500.00',
    'TipoDeComprobante' => 'I',
    'MetodoPago' => 'PUE',
    'LugarExpedicion' => '64000',
], $key, $cer);
```

Ver Resultado```

```

[⬆️ Regresar al listado](#factura)

#### Obtener XML

[](#obtener-xml)

```
use Kinedu\CfdiXML\CFDI;

$key = file_get_contents('AAA010101AAA.key.pem');
$cer = file_get_contents('AAA010101AAA.cer.pem');

$cfdi = new CFDI([
    'Serie' => 'A',
    'Folio' => 'A0103',
    'Fecha' => '2018-02-01T10:00:00',
    'FormaPago' => '01',
    'NoCertificado' => '3000100000300023708',
    'SubTotal' => '4741.38',
    'Moneda' => 'MXN',
    'TipoCambio' => '1',
    'Total' => '5500.00',
    'TipoDeComprobante' => 'I',
    'MetodoPago' => 'PUE',
    'LugarExpedicion' => '64000',
], $key, $cer);

$cfdi->getXML();
```

[⬆️ Regresar al listado](#factura)

#### Guardar CFDI

[](#guardar-cfdi)

```
use Kinedu\CfdiXML\CFDI;

$key = 'AAA010101AAA.key.pem';
$cer = 'AAA010101AAA.cer.pem';

$cfdi = new CFDI([
    'Serie' => 'A',
    'Folio' => 'A0103',
    'Fecha' => '2018-02-01T10:00:00',
    'FormaPago' => '01',
    'NoCertificado' => '3000100000300023708',
    'SubTotal' => '4741.38',
    'Moneda' => 'MXN',
    'TipoCambio' => '1',
    'Total' => '5500.00',
    'TipoDeComprobante' => 'I',
    'MetodoPago' => 'PUE',
    'LugarExpedicion' => '64000',
], $key, $cer);

$cfdi->save('./A0103.xml');
```

### Nodos

[](#nodos)

- [Relacionado](#relacionado)
- [Emisor](#emisor)
- [Receptor](#receptor)
- [Impuestos](#impuestos)
- [Concepto](#concepto)
- [Parte](#parte)
- [Información Aduanera](#informaci%C3%B3n-aduanera)
- [Timbre Fiscal Digital](#timbre-fiscal-digital)

#### Relacionado

[](#relacionado)

En este nodo se debe expresar la información de los comprobantes fiscales relacionados con el que se ésta generando, se deben expresar tantos numeros de nodos de CfdiRelacionado, como comprobantes se requieran relacionar.

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Relacionado;

$cfdi = new CFDI(...);

$cfdi->add(new Relacionado([
    'UUID' => '5FB2822E-396D-4725-8521-CDC4BDD20CCF',
], [
    'TipoRelacion' => '01',
]));
```

Ver Resultado```

```

[⬆️ Regresar al listado](#nodos)

#### Emisor

[](#emisor)

En este nodo se debe expresar la información del contribuyente que emite el comprobante fiscal.

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Emisor;

$cfdi = new CFDI(...);

$cfdi->add(new Emisor([
    'Rfc' => 'XAXX010101000',
    'Nombre' => 'John Doe',
    'RegimenFiscal' => '601',
]));
```

Ver Resultado```

```

[⬆️ Regresar al listado](#nodos)

#### Receptor

[](#receptor)

En este nodo se debe expresar la información del contribuyente receptor del comprobante.

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Receptor;

$cfdi = new CFDI(...);

$cfdi->add(new Receptor([
    'Rfc' => 'XEXX010101000',
    'Nombre' => 'John Doe',
    'ResidenciaFiscal' => 'USA',
    'NumRegIdTrib' => '121585958',
    'UsoCFDI' => 'G03',
]));
```

Ver Resultado```

```

[⬆️ Regresar al listado](#nodos)

#### Impuestos

[](#impuestos)

##### Traslado

[](#traslado)

###### Traslado en comprobante

[](#traslado-en-comprobante)

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CFDI\Node\Impuesto\Traslado;

$cfdi = new CFDI([...]);

$cfdi->add(new Traslado([
    'Impuesto' => '002',
    'TipoFactor' => 'Tasa',
    'TasaOCuota' => '0.160000',
    'Importe' => '4500',
], [], [
    'TotalImpuestosTrasladados' => '4500',
]));
```

Ver Resultado```

```

###### Traslado en concepto

[](#traslado-en-concepto)

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Concepto;
use Kinedu\CFDI\Node\Impuesto\Traslado;

$cfdi = new CFDI([...]);

$concepto = new Concepto([...]);

$concepto->add(new Traslado([
    'Base' => '4500',
    'Impuesto' => '002',
    'TipoFactor' => 'Tasa',
    'TasaOCuota' => '0.160000',
    'Importe' => '720',
]));
```

Ver Resultado```

```

##### Retención

[](#retención)

###### Retención en comprobante

[](#retención-en-comprobante)

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CFDI\Node\Impuesto\Retencion;

$cfdi = new CFDI([...]);

$cfdi->add(new Retencion([
    'Impuesto' => '002',
    'Importe' => '4500',
], [], [
    'TotalImpuestosRetenidos' => '4500',
]));
```

Ver Resultado```

```

###### Retención en concepto

[](#retención-en-concepto)

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Concepto;
use Kinedu\CFDI\Node\Impuesto\Retencion;

$cfdi = new CFDI([...]);

$concepto = new Concepto([...]);

$concepto->add(new Retencion([
    'Base' => '4500',
    'Impuesto' => '003',
    'TipoFactor' => 'Tasa',
    'TasaOCuota' => '0.530000',
    'Importe' => '2385',
]));
```

Ver Resultado```

```

#### Concepto

[](#concepto)

En este nodo se debe expresar la información detallada de un bien o servicio descrito en el comprobante.

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Concepto;

$cfdi = new CFDI(...);

$cfdi->add(new Concepto([
    'ClaveProdServ' => '10317331',
    'NoIdentificacion' => 'UT421511',
    'Cantidad' => '24',
    'ClaveUnidad' => 'H87',
    'Unidad' => 'Pieza',
    'Descripcion' => 'Arreglo de 24 tulipanes rosadas recién cortados',
    'ValorUnitario' => '56.00',
    'Importe' => '1344.00',
    'Descuento' => '10.00',
]));
```

Ver Resultado```

```

[⬆️ Regresar al listado](#nodos)

#### Parte

[](#parte)

En este nodo se pueden expresar las partes o componentes que integran la totalidad del concepto expresado en el comprobante fiscal digital por Internet.

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Parte;
use Kinedu\CfdiXML\Node\Concepto;

$cfdi = new CFDI(...);

$concepto = new Concepto([
    'ClaveProdServ' => '27113201',
    'NoIdentificacion' => 'UT421456',
    'Cantidad' => '1',
    'ClaveUnidad' => 'KT',
    'Unidad' => 'Kit',
    'Descripcion' => 'Kit de destornillador',
    'ValorUnitario' => '217.30',
    'Importe' => '217.30',
    'Descuento' => '0.00',
]);

$tornillo = new Parte([
    'ClaveProdServ' => '31161500',
    'NoIdentificacion' => 'UT367898',
    'Cantidad' => '34',
    'ClaveUnidad' => 'H87',
    'Unidad' => 'Pieza',
    'Descripcion' => 'Tornillo',
    'ValorUnitario' => '00.20',
    'Importe' => '6.80',
]);

$tornilloPerno = new Parte([
    'ClaveProdServ' => '31161501',
    'NoIdentificacion' => 'UT367899',
    'Cantidad' => '14',
    'ClaveUnidad' => 'H87',
    'Unidad' => 'Pieza',
    'Descripcion' => 'Tornillo de Perno',
    'ValorUnitario' => '00.75',
    'Importe' => '10.50',
]);

$destornillador = new Parte([
    'ClaveProdServ' => '27111701',
    'NoIdentificacion' => 'UT367900',
    'Cantidad' => '2',
    'ClaveUnidad' => 'H87',
    'Unidad' => 'Pieza',
    'Descripcion' => 'Destornillador',
    'ValorUnitario' => '100.00',
    'Importe' => '200.00',
]);

$concepto->add($tornillo);
$concepto->add($tornilloPerno);
$concepto->add($destornillador);

$cfdi->add($concepto);
```

Ver Resultado```

```

[⬆️ Regresar al listado](#nodos)

#### Información Aduanera

[](#información-aduanera)

En este nodo se debe expresar la información aduanera correspondiente a cada concepto cuando se trate de ventas de primera mano de mercancías importadas.

```
use Kinedu\CfdiXML\CFDI;
use Kinedu\CfdiXML\Node\Concepto;
use Kinedu\CfdiXML\Node\InformacionAduanera;

$cfdi = new CFDI(...);

$concepto = new Concepto(...);

$concepto->add(new InformacionAduanera([
    'NumeroPedimento' => '00 00 0000 0000000',
]));

$cfdi->add($concepto);
```

Ver Resultado```

```

[⬆️ Regresar al listado](#nodos)

Licencia
--------

[](#licencia)

CFDI XML esta bajo la Licencia MIT, si quieres saber más al respecto puedes ver el archivo de [Licencia](LICENSE) que se encuentra en este mismo repositorio.

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity26

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity63

Established project with proven stability

 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.

###  Release Activity

Cadence

Every ~195 days

Recently: every ~272 days

Total

8

Last Release

1697d ago

PHP version history (2 changes)v0.1.0PHP ^7.1

v0.2.0PHP ^7.3|^8.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/35609043?v=4)[Kinedu](/maintainers/Kinedu)[@Kinedu](https://github.com/Kinedu)

---

Top Contributors

[![orlandocharles](https://avatars.githubusercontent.com/u/22510311?v=4)](https://github.com/orlandocharles "orlandocharles (2 commits)")

---

Tags

cfdikineduphpsatsatcfdiKinedu

###  Code Quality

TestsPHPUnit

### Embed Badge

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

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

###  Alternatives

[phpcfdi/cfdi-to-json

Convert CFDI to JSON

3122.9k3](/packages/phpcfdi-cfdi-to-json)[phpcfdi/sat-ws-descarga-masiva

Librería para usar el servicio web del SAT de Descarga Masiva

17782.3k3](/packages/phpcfdi-sat-ws-descarga-masiva)[phpcfdi/credentials

Library to use eFirma (fiel) and CSD (sellos) from SAT

84182.3k9](/packages/phpcfdi-credentials)[phpcfdi/cfdi-sat-scraper

Web Scraping para extraer facturas electrónicas desde la página del SAT

9424.4k](/packages/phpcfdi-cfdi-sat-scraper)[phpcfdi/sat-estado-cfdi

Consulta el estado de un cfdi en el webservice del SAT

3265.9k5](/packages/phpcfdi-sat-estado-cfdi)[facturapi/facturapi-php

Facturapi's PHP client library

1550.1k](/packages/facturapi-facturapi-php)

PHPackages © 2026

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