PHPackages                             platinum-place/php-dgii-xml-signer - 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. platinum-place/php-dgii-xml-signer

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

platinum-place/php-dgii-xml-signer
==================================

XML Signer for DGII (Electronic Invoicing e-CF) Dominican Republic. Implements XMLDSig with specific canonicalization for official validation.

v1.3.3(1mo ago)51.3k51MITPHPPHP ^8.1

Since Feb 10Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/platinum-place/php-dgii-xml-signer)[ Packagist](https://packagist.org/packages/platinum-place/php-dgii-xml-signer)[ RSS](/packages/platinum-place-php-dgii-xml-signer/feed)WikiDiscussions main Synced yesterday

READMEChangelogDependencies (18)Versions (14)Used By (1)

PHP DGII XML Signer 🇩🇴
======================

[](#php-dgii-xml-signer-)

[![Latest Version on Packagist](https://camo.githubusercontent.com/2dc2ab484aeb16d73ede396db6ef2f05f18f2053207bf6b510bb4b2b4dd9939e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f706c6174696e756d2d706c6163652f7068702d646769692d786d6c2d7369676e65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/platinum-place/php-dgii-xml-signer)[![Total Downloads](https://camo.githubusercontent.com/e67f8125ceb034cf1a77068a59774ae6b6e9e1d5cea4a60de93c8cdfd9173216/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f706c6174696e756d2d706c6163652f7068702d646769692d786d6c2d7369676e65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/platinum-place/php-dgii-xml-signer)[![GitHub License](https://camo.githubusercontent.com/16e7944e69cffbd9a4a9818e81c680afa23fc82d9adf1568f3e5b381313cfeb6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f706c6174696e756d2d706c6163652f7068702d646769692d786d6c2d7369676e65722e7376673f7374796c653d666c61742d737175617265)](LICENSE)

---

Características
---------------

[](#características)

- **Estándar XMLDSig:** Implementación robusta basada en `selective/xmldsig`.
- **Canonicalización Especial:** Ajustes técnicos en la normalización C14N requeridos por el validador oficial de la DGII.
- **Soporte Certificados:** Compatible con archivos `.p12` y `.pfx`.
- **Ligero:** Diseñado para ser integrado fácilmente en cualquier proyecto PHP o framework (Laravel, Symfony, etc.).

---

Créditos y Base Técnica
-----------------------

[](#créditos-y-base-técnica)

Este proyecto se basa directamente en las especificaciones del **[Instructivo sobre Facturación Electrónica: Firmado de e-CF](https://dgii.gov.do/cicloContribuyente/facturacion/comprobantesFiscalesElectronicosE-CF/Documentacin%20sobre%20eCF/Instructivos%20sobre%20Facturaci%C3%B3n%20Electr%C3%B3nica/Firmado%20de%20e-CF.pdf)** publicado por la **DGII**.

Para la implementación técnica, utilizamos como base la librería **[selective/xmldsig](https://github.com/selective-php/xmldsig)**. Esta librería es la recomendada (e ilustrada) por la DGII en sus manuales para desarrolladores PHP. Sin embargo, para lograr una validación exitosa en los servidores oficiales, es necesario realizar ajustes manuales que no están detallados de forma explícita en la documentación general.

---

Aclaraciones Importantes
------------------------

[](#aclaraciones-importantes)

Aunque la documentación de la DGII proporciona ejemplos, existen detalles críticos en la implementación de la librería base que deben ajustarse para que el XML sea aceptado.

### Caso 1: Modificaciones en `XmlSigner.php`

[](#caso-1-modificaciones-en-xmlsignerphp)

Según el instructivo de la DGII, es imperativo modificar la clase `XmlSigner.php` de la librería `selective/xmldsig` para forzar una canonicalización sin comentarios.

1. **Ajuste de Canonicalización General:**En la clase `XmlSigner`, se debe asegurar que el método `C14N` se llame con los parámetros correctos para excluir comentarios:

    ```
    // Cambiar de:
    $canonicalData = $element->C14N(true, false);
    // A:
    $canonicalData = $element->C14N(false, false);
    ```
2. **Ajuste en `SignedInfo` (Línea 179 aprox.):**Para la firma del bloque `SignedInfo`, se requiere una normalización aún más estricta:

    ```
    // Cambiar de:
    $c14nSignedInfo = $signedInfoElement->C14N(true, false);
    // A:
    $c14nSignedInfo = $signedInfoElement->C14N();
    ```

**Nota:** Este paquete ya incluye estas correcciones aplicadas de forma nativa en su clase `XmlSigner`, por lo que no necesitas modificar nada en tu carpeta `vendor`.

### Caso 2: Compatibilidad con OpenSSL (Error RC2-40-CBC)

[](#caso-2-compatibilidad-con-openssl-error-rc2-40-cbc)

La documentación menciona que la librería fue probada en PHP versiones 8.1.12 y 8.1.13, si utilizas el paquete en una version mas reciente, como 8.4 o 8.5, la validación falla debido a que el cifrado RC2-40-CBC utilizado en los archivos .p12 cambió en las versiones más recientes de OpenSSL, que normalmente vienen con PHP 8.2 en adelante.

#### Habilitar cifrado "legacy"

[](#habilitar-cifrado-legacy)

1. Edita el archivo `openssl.cnf` con el siguiente comando:

    ```
    sudo nano /etc/ssl/openssl.cnf
    ```
2. Busca la sección \[default\_sect\] y cámbiarla a:

    ```
     [default_sect]
     activate = 1
    ```
3. Luego, busca la sección \[legacy\_sect\] y cámbiarla a:

    ```
     [legacy_sect]
     activate = 1
    ```
4. Por último, busca la sección \[provider\_sect\] y cámbiarla a:

    ```
     [provider_sect]
     default = default_sect
     legacy = legacy_sect
    ```
5. Finalmente, guardar los cambios, salir del archivo y reiniciar el entorno.

---

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

[](#instalación)

```
composer require platinum-place/php-dgii-xml-signer
```

---

Uso rápido
----------

[](#uso-rápido)

```
use PlatinumPlace\DgiiXmlSigner\SignManager;

$signer = new SignManager();

// Leer el certificado
$certContent = file_get_contents('path/to/certificate.p12');
$password = 'tu_password';

// XML a firmar
$xml = '...';

// Firmar XML
$signedXml = $signer->sign($certContent, $password, $xml);
file_put_contents('signed_invoice.xml', $signedXml);

// Verificar Firma XML
try {
    $signer->verifyXmlSignature($signedXml);
    echo "¡La firma digital del XML es válida!";
} catch (\Selective\XmlDSig\Exception\XmlSignatureValidatorException $e) {
    echo "Firma inválida o error de verificación: " . $e->getMessage();
}
```

---

Desarrollo y Contribución
-------------------------

[](#desarrollo-y-contribución)

Este proyecto está abierto a contribuciones para mantenerse al día con los estándares de la DGII.

- **Guía de Contribución:** Detalles sobre cómo enviar PRs y configurar el entorno en [CONTRIBUTING.md](./CONTRIBUTING.md).

---

Soporte y Consultoría
---------------------

[](#soporte-y-consultoría)

Si necesitas asistencia técnica con la implementación de este paquete o tienes dudas generales sobre el ecosistema de **Facturación Electrónica en la República Dominicana**, puedes contactarme directamente.

Ofrezco servicios de consultoría especializada para empresas que buscan certificar sus sistemas ante la DGII.

- **Contacto:** Mis métodos de contacto actualizados están disponibles en mi **[Perfil de GitHub](https://github.com/platinum-place)**.
- **Issues:** Para errores del paquete, por favor abre un issue en este repositorio.

Recursos Adicionales
--------------------

[](#recursos-adicionales)

- **[Documentación Oficial DGII - Facturación Electrónica](https://dgii.gov.do/cicloContribuyente/facturacion/comprobantesFiscalesElectronicosE-CF/Paginas/documentacionSobreE-CF.aspx)**: Portal principal con toda la normativa y documentación técnica.
- **[Instructivo de Firmado de e-CF (PDF)](https://dgii.gov.do/cicloContribuyente/facturacion/comprobantesFiscalesElectronicosE-CF/Documentacin%20sobre%20eCF/Instructivos%20sobre%20Facturaci%C3%B3n%20Electr%C3%B3nica/Firmado%20de%20e-CF.pdf)**: Guía técnica detallada sobre el proceso de firma digital.
- **[Librería Base: selective/xmldsig](https://github.com/selective-php/xmldsig)**: Repositorio de la librería utilizada como motor de firma.

---

⚖️ Licencia
-----------

[](#️-licencia)

Este proyecto está bajo la Licencia MIT. Consulta el archivo [LICENSE](LICENSE) para más detalles.

###  Health Score

49

—

FairBetter than 94% of packages

Maintenance94

Actively maintained with recent releases

Popularity26

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity51

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.

###  Release Activity

Cadence

Every ~9 days

Total

13

Last Release

31d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f286145bde27a2fe542f247d9a955ff93d55995c0497edd13a3a60347905a373?d=identicon)[platinum-place](/maintainers/platinum-place)

---

Top Contributors

[![platinum-place](https://avatars.githubusercontent.com/u/28694430?v=4)](https://github.com/platinum-place "platinum-place (68 commits)")

---

Tags

dgiiecfencfsfirmadoropensslphpxmlxmldsig-signaturephpxmlsignaturexmldsigfacturacion-electronicadgiie-CFdominican-republic

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/platinum-place-php-dgii-xml-signer/health.svg)

```
[![Health](https://phpackages.com/badges/platinum-place-php-dgii-xml-signer/health.svg)](https://phpackages.com/packages/platinum-place-php-dgii-xml-signer)
```

###  Alternatives

[marcelxyz/php-xml-digital-signature

A PHP library for signing XML documents using digital signatures

7357.4k](/packages/marcelxyz-php-xml-digital-signature)[greenter/xml

XML generación de documentos electrónicos, Facturacion Electrónica SUNAT - Perú

1159.4k4](/packages/greenter-xml)[goetas/xsd2php-runtime

Convert XSD (XML Schema) definitions into PHP classes

493.3k](/packages/goetas-xsd2php-runtime)[bupy7/xml-constructor

The array-like constructor of XML document structure.

1339.5k](/packages/bupy7-xml-constructor)

PHPackages © 2026

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