Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 1.0.1 #11

Merged
merged 3 commits into from
Oct 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 12 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ de esta manera no es necesario compartir el certificado ni la llave privada con
- Si tu PAC no lo ofrece entonces deberías solicitárselo.
- Nunca compartas tu llave privada de firmado de CFDI con nadie, ni con tu PAC.


## Instalación

Usa [composer](https://getcomposer.org/)
Expand All @@ -33,14 +32,13 @@ Usa [composer](https://getcomposer.org/)
composer require phpcfdi/xml-cancelacion
```


## Ejemplo básico de uso

### Con el objeto de ayuda

```php
<?php

declare(strict_types=1);
use PhpCfdi\XmlCancelacion\XmlCancelacionHelper;
use PhpCfdi\XmlCancelacion\Definitions\RfcRole;
use PhpCfdi\XmlCancelacion\Definitions\CancelAnswer;
Expand All @@ -62,13 +60,13 @@ $consultaRelacionados = $xmlCancelacion->signCancellationAnswer(
CancelAnswer::accept(), // aceptar la cancelación
'CVD110412TF6' // RFC del PAC (Quadrum & Finkok)
);

```

### Con un uso detallado de solicitud de cancelación

```php
<?php
declare(strict_types=1);
use PhpCfdi\XmlCancelacion\Capsules\Cancellation;
use PhpCfdi\XmlCancelacion\Signers\DOMSigner;
use PhpCfdi\XmlCancelacion\Credentials;
Expand All @@ -77,7 +75,7 @@ use PhpCfdi\XmlCancelacion\Credentials;
$credentials = new Credentials('certificado.cer.pem', 'privatekey.key.pem', '12345678a');

// datos de cancelación
$data = new Cancellation('LAN7008173R5', ['12345678-1234-1234-1234-123456789012']);
$data = new Cancellation('LAN7008173R5', ['12345678-1234-1234-1234-123456789012'], new DateTimeImmutable());

// generación del xml
$xml = (new DOMSigner())->signCapsule($data, $credentials);
Expand Down Expand Up @@ -126,7 +124,6 @@ La salida esperada es algo como lo siguiente (sin los espacios en blanco que agr
</Cancelacion>
```


## Objeto de ayuda

**`XmlCancelacionHelper`** te permite usar la librería rápidamente.
Expand Down Expand Up @@ -161,18 +158,22 @@ Para crear la solicitud de respuesta usa el método `signCancellationAnswer`.
Requiere el UUID para el cual estás estableciendo la respuesta, la respuesta (aceptación o cancelación)
y el RFC del PAC por el cual se realiza la consulta.


## Objetos de trabajo

**`CapsuleInterface`** son los objetos que contienen toda la información relacionada con los datos a firmar,
este tipo de objetos tiene la facultad de poder revisar si el RFC es el mismo usado en la firma así como
poder generar el documento XML a firmar.

**`Credentials`** Es un objeto que encapsula el trabajo con los certificados y llave privada. Internamente utiliza


**`CapsuleSigner`** genera el XML usando un `Capsule` y un `Credentials`.
**`Credentials`** Es un objeto que encapsula el trabajo con los certificados y llave privada.
Internamente utiliza [`phpcfdi/credentials`](https://github.com/phpcfdi/credentials) y la clase interna es solo
una indirección de `PhpCfdi\Credentials\Credential`. Incluso puedes crear una credencial de `phpcfd/xml-cancelacion`
a partir de un objeto directo de `phpcfdi/credentials`.

**`SignerInterface`** son los objetos que permiten firmar el documento generado por una *cápsula* y una *credencial*.
Existen dos implementaciones: `DOMSigner` (recomendada) y `XmlSecLibsSigner`. La primera no requiere de mayores
dependencias y realiza el firmado utilizando las especificaciones del SAT. La segunda utiliza *parcialmente*
[XmlSecLibs](https://github.com/phpcfdi/xml-cancelacion/blob/master/XmlSecLibs.md) y termina la información de
la firma usando un mecanismo interno.

## Observaciones

Expand All @@ -187,7 +188,6 @@ A partir de 2019-08-13 con la versión `0.4.0` se eliminó la dependencia a `ecl
librería [`phpcfdi/credentials`](https://github.com/phpcfdi/xml-cancelacion), con esta nueva dependencia se trabaja
mucho mejor con los certificados y llaves privadas.


## Compatilibilidad

Esta librería se mantendrá compatible con al menos la versión con
Expand All @@ -196,19 +196,16 @@ Esta librería se mantendrá compatible con al menos la versión con
También utilizamos [Versionado Semántico 2.0.0](https://semver.org/lang/es/) por lo que puedes usar esta librería
sin temor a romper tu aplicación.


## Contribuciones

Las contribuciones con bienvenidas. Por favor lee [CONTRIBUTING][] para más detalles
y recuerda revisar el archivo de tareas pendientes [TODO][] y el [CHANGELOG][].


## Copyright and License

The `phpcfdi/xml-cancelacion` library is copyright © [PhpCfdi](https://www.phpcfdi.com/)
and licensed for use under the MIT License (MIT). Please see [LICENSE][] for more information.


[contributing]: https://github.com/phpcfdi/xml-cancelacion/blob/master/CONTRIBUTING.md
[changelog]: https://github.com/phpcfdi/xml-cancelacion/blob/master/docs/CHANGELOG.md
[todo]: https://github.com/phpcfdi/xml-cancelacion/blob/master/docs/TODO.md
Expand Down
7 changes: 6 additions & 1 deletion docs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
# CHANGELOG

# Version 1.0.1 2019-10-02

- Fix documentation to point out version 1.0 instead of 0.5.
- Fix documentation PHP examples.

# Version 1.0.0 2019-09-28

- This version is a major change, it is not compatible with previous versions
Read [UPGRADE-0.5](https://github.com/phpcfdi/xml-cancelacion/blob/master/docs/UPGRADE-0.5.md)
Read [UPGRADE-1.0](https://github.com/phpcfdi/xml-cancelacion/blob/master/docs/UPGRADE-1.0.md)
- New signed documents:
- Cancellation: For request to SAT a cancellation of one or many CFDI.
- ObtainRelated: For asking to SAT related documents of a CFDI.
Expand Down
11 changes: 5 additions & 6 deletions docs/UPGRADE-0.5.md → docs/UPGRADE-1.0.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Actualización de 0.4 a 0.5
# Actualización de 0.4 a 1.0

:us: This document is in spanish as this is the primary language of the target developers

Expand All @@ -12,7 +12,6 @@ Si estás usando el objeto de ayuda `XmlCancelacionHelper` disponible desde la v
Si estás usando `Capsule` directamente:

```text
<?php
$credentials = new Credentials('certificado.cer.pem', 'privatekey.key.pem', '12345678a');

// código de 0.4.0
Expand All @@ -24,7 +23,7 @@ Cualquiera de estas dos formas pueden ser un remplazo:

```php
<?php

declare(strict_types=1);
use PhpCfdi\XmlCancelacion\Credentials;
use PhpCfdi\XmlCancelacion\XmlCancelacionHelper;
use PhpCfdi\XmlCancelacion\Capsules\Cancellation;
Expand All @@ -47,7 +46,7 @@ $xml = $signer->signCapsule($data, $credentials);
El SAT ofrece algunos servicios a través de los PAC como una pasarela, al menos conozco tres servicios documentados:
solicitud de cancelación, solicitud de UUID relacionados y aceptación/rechazo de cancelaciones pendientes.

La solicitud de cancelación es lo único que se cubría hasta la versión `0.4.x` y en la versión `0.5.x` se han
La solicitud de cancelación es lo único que se cubría hasta la versión `0.4.x` y en la versión `1.0.x` se han
creado las firmas de las otras dos comunicaciones.

Este cambio evidenció que se necesitaba restructurar la librería para poder firmar los otros mensajes de
Expand All @@ -72,15 +71,15 @@ agregar el elemento `KeyInfo` tal como lo quiere el SAT, por lo que para esta ú
## Mejor uso de credenciales

El objeto `PhpCfdi\XmlCancelacion\Credentials` internamente utiliza un objeto `PhpCfdi\Credentials\Credential`.
En la versión `0.5` se introduce un método constructor `createWithPhpCfdiCredential()` para poder fabricar el objeto
En la versión `1.0` se introduce un método constructor `createWithPhpCfdiCredential()` para poder fabricar el objeto
`Credentials` usando un objeto `Credential` ya existente.

Esto es útil porque de esta manera el certificado y llave privada no necesitan existir en el sistema de archivos local
y se puede crear la credencial de esta librería con los datos de una credencial de PhpCfdi.

```php
<?php

declare(strict_types=1);
use PhpCfdi\Credentials\Certificate;
use PhpCfdi\Credentials\Credential as PhpCfdiCredential;
use PhpCfdi\Credentials\PrivateKey;
Expand Down
4 changes: 2 additions & 2 deletions docs/XmlSecLibs.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ implementación manual y no la incompleta/incorrecta de XmlSecLibs.
## Ejemplo de uso:

```php
<?php declare(strict_types=1);

<?php
declare(strict_types=1);
use PhpCfdi\XmlCancelacion\Signers\XmlSecLibsSigner;
use PhpCfdi\XmlCancelacion\XmlCancelacionHelper;

Expand Down