Skip to content
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
23 changes: 20 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,23 @@ on:

jobs:

composer-normalize:
name: Composer normalization
runs-on: "ubuntu-latest"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2 # see https://github.com/marketplace/actions/setup-php-action
with:
php-version: '8.1'
coverage: none
tools: composer-normalize
env:
fail-fast: true
- name: Composer normalize
run: composer-normalize

phpcs:
name: Code style (phpcs)
runs-on: "ubuntu-latest"
Expand All @@ -20,7 +37,7 @@ jobs:
with:
php-version: '8.1'
coverage: none
tools: composer:v2, cs2pr, phpcs
tools: cs2pr, phpcs
env:
fail-fast: true
- name: Code style (phpcs)
Expand All @@ -37,7 +54,7 @@ jobs:
with:
php-version: '8.1'
coverage: none
tools: composer:v2, cs2pr, php-cs-fixer
tools: cs2pr, php-cs-fixer
env:
fail-fast: true
- name: Code style (php-cs-fixer)
Expand All @@ -54,7 +71,7 @@ jobs:
with:
php-version: '8.1'
coverage: none
tools: composer:v2, cs2pr, phpstan
tools: composer:v2, phpstan
extensions: soap
env:
fail-fast: true
Expand Down
1 change: 1 addition & 0 deletions .phive/phars.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
<phar name="phpcbf" version="^3.7.1" installed="3.7.1" location="./tools/phpcbf" copy="false"/>
<phar name="php-cs-fixer" version="^3.9.5" installed="3.9.5" location="./tools/php-cs-fixer" copy="false"/>
<phar name="phpstan" version="^1.8.2" installed="1.8.2" location="./tools/phpstan" copy="false"/>
<phar name="composer-normalize" version="^2.28.3" installed="2.28.3" location="./tools/composer-normalize" copy="false"/>
</phive>
66 changes: 39 additions & 27 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
{
"name": "phpcfdi/finkok",
"description": "Librería para conectar con la API de servicios de FINKOK",
"keywords": ["phpcfdi", "sat", "cfdi", "finkok"],
"homepage": "https://github.com/phpcfdi/finkok",
"license": "MIT",
"keywords": [
"phpcfdi",
"sat",
"cfdi",
"finkok"
],
"authors": [
{
"name": "Carlos C Soto",
"email": "eclipxe13@gmail.com",
"homepage": "https://eclipxe.com.mx/"
}
],
"homepage": "https://github.com/phpcfdi/finkok",
"support": {
"source": "https://github.com/phpcfdi/finkok",
"issues": "https://github.com/phpcfdi/finkok/issues"
},
"prefer-stable": true,
"config": {
"optimize-autoloader": true,
"preferred-install": {
"*": "dist"
}
"issues": "https://github.com/phpcfdi/finkok/issues",
"source": "https://github.com/phpcfdi/finkok"
},
"require": {
"php": ">=7.3",
"ext-json": "*",
"ext-soap": "*",
"ext-dom": "*",
"ext-json": "*",
"ext-openssl": "*",
"psr/log": "^1.1",
"ext-soap": "*",
"eclipxe/enum": "^0.2.0",
"eclipxe/micro-catalog": "^0.1.0",
"phpcfdi/cfdi-expresiones": "^3.2",
"phpcfdi/credentials": "^1.0.1",
"phpcfdi/xml-cancelacion": "^2.0.1",
"robrichards/xmlseclibs": "^3.0.4",
"eclipxe/micro-catalog": "^0.1.0",
"phpcfdi/cfdi-expresiones": "^3.2"
"psr/log": "^1.1 || ^2.0 || ^3.0",
"robrichards/xmlseclibs": "^3.0.4"
},
"require-dev": {
"ext-fileinfo": "*",
"symfony/dotenv": "^5.1",
"eclipxe/cfdiutils": "^2.23.2",
"phpunit/phpunit": "^9.5.10"
"phpcfdi/rfc": "^1.1",
"phpunit/phpunit": "^9.5.10",
"symfony/dotenv": "^5.1 || ^6.0"
},
"prefer-stable": true,
"autoload": {
"psr-4": {
"PhpCfdi\\Finkok\\": "src/"
Expand All @@ -52,29 +52,41 @@
"PhpCfdi\\Finkok\\Tests\\": "tests/"
}
},
"config": {
"optimize-autoloader": true,
"preferred-install": {
"*": "dist"
}
},
"scripts": {
"dev:build": ["@dev:fix-style", "@dev:check-style", "@dev:test"],
"dev:build": [
"@dev:fix-style",
"@dev:check-style",
"@dev:test"
],
"dev:check-style": [
"@php tools/composer-normalize normalize --dry-run",
"@php tools/php-cs-fixer fix --dry-run --verbose",
"@php tools/phpcs --colors -sp"
],
"dev:coverage": [
"@php -dzend_extension=xdebug.so vendor/bin/phpunit --verbose --coverage-html build/coverage/html/"
],
"dev:fix-style": [
"@php tools/composer-normalize normalize",
"@php tools/php-cs-fixer fix --verbose",
"@php tools/phpcbf --colors -sp"
],
"dev:test": [
"@php vendor/bin/phpunit --testdox --verbose --stop-on-failure tests/Unit",
"@php tools/phpstan analyse --no-progress --verbose"
],
"dev:coverage": [
"@php -dzend_extension=xdebug.so vendor/bin/phpunit --verbose --coverage-html build/coverage/html/"
]
},
"scripts-descriptions": {
"dev:build": "DEV: run dev:fix-style dev:check-style and dev:tests, run before pull request",
"dev:check-style": "DEV: search for code style errors using php-cs-fixer and phpcs",
"dev:fix-style": "DEV: fix code style errors using php-cs-fixer and phpcbf",
"dev:test": "DEV: run phpunit and phpstan",
"dev:coverage": "DEV: run phpunit with xdebug and storage coverage in build/coverage/html/"
"dev:check-style": "DEV: search for code style errors using composer-normalize, php-cs-fixer and phpcs",
"dev:coverage": "DEV: run phpunit with xdebug and storage coverage in build/coverage/html/",
"dev:fix-style": "DEV: fix code style errors using composer-normalize, php-cs-fixer and phpcbf",
"dev:test": "DEV: run phpunit and phpstan"
}
}
50 changes: 47 additions & 3 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,65 @@

Nos apegamos a [SEMVER](SEMVER.md), revisa la información para entender mejor el control de versiones.

## Unreleased 2022-08-08
## Versión 0.5.0 2022-08-12

### Implementación del método `get_contracts_sndi`

Se utiliza el nuevo método `get_contracts_sndi` en lugar del obsoleto `get_contracts`.
Esto lleva a que la clase `PhpCfdi\Finkok\Services\Manifest\GetContractsCommand` ahora requiere de `$snid`.
Igualmente, `PhpCfdi\Finkok\QuickFinkok#customerGetContracts()` requiere de `$snid`.

### Mejorar la dependencia de `PSR-3`

Ahora se permite compatibilidad del paquete `psr/log` con las versiones `^1.1`, `^2.0` o `^3.0`.

### Mejorar la dependencia de `symfony/dotenv`

Se permite la compatibilidad de desarrollo de la librería `symfony/dotenv` con `^5.0` o `^6.0`.

### Saltar las pruebas de integración de cancelación que fallen

A menudo el servicio de pruebas del SAT relacionado con cancelaciones presenta fallas.
Por esto, las pruebas de integración relacionadas con tocar este servicio,
en lugar de marcarlas como fallidas se marcarán como brincadas.

- `PhpCfdi\Finkok\Tests\Integration\Services\Cancel\CancelServicesTest::testCreateCfdiThenGetSatStatusThenCancelSignatureThenGetReceipt()`.
- `PhpCfdi\Finkok\Tests\Integration\Services\Cancel\GetRelatedSignatureServiceTest::testConsumeServiceWithRelated()`.
- `PhpCfdi\Finkok\Tests\Integration\Services\Retentions\CancelSignatureServiceTest::testCancelSignatureRecentlyCreatedDocument()`.

### Pruebas largas tienen duración definida

Las pruebas largas que reintentan varias veces una tarea ahora tienen un límite de tiempo definido en la variable
de entorno `FINKOK_LONGTEST_TIMEOUT`. Debe ser un valor entero en segundos, el valor si no existe es 30, mínimo 30 y máximo 600.

### Búsqueda de RFC libre en pruebas

Se implementa una búsqueda binaria en un espacio consecutivo de RFC para hacer únicamente 16 búsquedas.
Anteriormente, se usaba un espacio que podía conducir a muchas más búsquedas y la prueba
`PhpCfdi\Finkok\Tests\Integration\Services\Registration\AddServiceTest::testConsumeAddServiceWithRandomRfc`
no era ejecutada a menos que se permitieran pruebas de larga duración.

### Normalización de `composer.json`

Se incluye la herramienta `composer-normalize` para revisar y normalizar el archivo `composer.json`.

### Se integran los cambios previos no liberados

#### 2022-08-08

Corregir el proceso de construcción:

- Se define el tipo de dato `TEntry` para `MicroCatalog<TEntry>` en `AcceptRejectUuidStatus`.
- Actualizar librerías de desarrollo.

## Unreleased 2022-07-18
#### 2022-07-18

Corregir el proceso de construcción:

- Corregir `tests/stamp-precfdi-devenv.php` en su inicialización y estilo de código.
- Actualizar librerías de desarrollo.

## Unreleased 2022-07-04
#### 2022-07-04

Estos cambios están presentes únicamente en desarrollo, no es necesaria una nueva versión:

Expand Down
2 changes: 1 addition & 1 deletion docs/ListadoDeServicios.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ Estos servicios son de CFDI de retenciones e información de pagos (RET).

## Manifiesto de Finkok

- [X] `get_contracts`: Obtiene los textos para ser firmados
- [X] `get_contracts_snid`: Obtiene los textos para ser firmados
- [X] `sign_contract`: Envía los textos firmados con la FIEL

## Servicios que no se implementarán
Expand Down
2 changes: 1 addition & 1 deletion docs/PruebasDeIntegracionContinua.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Para desencriptar el archivo de configuración `tests/.env-testing.enc -> tests/
comando. Esta operación es la que se ejecuta en `functional-test.yml` usando el secreto `secrets.ENV_GPG_SECRET`.

```shell
gpg --quiet --batch --yes --decrypt --output decoded tests/.env-testing.enc
gpg --quiet --batch --yes --decrypt --output - tests/.env-testing.enc
```

### Cobertura de código
Expand Down
22 changes: 12 additions & 10 deletions src/QuickFinkok.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public function stamp(string $preCfdi): Stamping\StampingResult
/**
* Este método se encarga de realizar el timbrado de XML, una vez que se timbra el XML se guarda en una cola de
* espera para ser enviado en el mejor momento a los servicios del SAT, por lo que el servicio de timbrado es
* mucho mas rápido, y es de uso recomendado en timbrado de alto numero de timbres por segundo.
* mucho más rápido, y es de uso recomendado en timbrado de alto número de timbres por segundo.
*
* Nota: El CFDI generado puede no estar disponible en los servidores del SAT hasta varios minutos después
*
Expand Down Expand Up @@ -103,7 +103,7 @@ public function cfdiDownload(string $uuid, string $rfc): Utilities\DownloadXmlRe
}

/**
* Este método se usa para consultar el estatus de una factura que se quedo pendiente de enviar al SAT debido a una
* Este método se usa para consultar el estatus de una factura que se quedó pendiente de enviar al SAT debido a una
* falla en el sistema del SAT o bien que se envió a través del método Quick_Stamp
*
* @param string $uuid
Expand All @@ -118,7 +118,7 @@ public function stampQueryPending(string $uuid): Stamping\QueryPendingResult
}

/**
* Este método es el encargado de cancelar uno o varios CFDIs emitidos por medio de los web services de Finkok
* Este método es el encargado de cancelar uno o varios CFDI emitidos por medio de los web services de Finkok
* Durante el proceso no se envía ningún CSD a Finkok y la solicitud firmada es creada usando los datos del CSD
*
* @param Credential $credential
Expand Down Expand Up @@ -175,11 +175,11 @@ public function satStatusXml(string $xmlCfdi): Cancel\GetSatStatusResult
}

/**
* Obtiene una lista de los UUIDs relacionados de un UUID
* Obtiene una lista de los UUID relacionados de un UUID
*
* @param Credential $credential
* @param string $uuid
* @param RfcRole|null $role si es NULL entonces se usa el rol de emisor
* @param RfcRole|null $role Si es NULL entonces se usa el rol de emisor
* @return Cancel\GetRelatedSignatureResult
* @see https://wiki.finkok.com/doku.php?id=get_related_signature
* @see https://wiki.finkok.com/doku.php?id=get_related
Expand Down Expand Up @@ -403,16 +403,18 @@ public function customersAssign(string $rfc, int $credits): Registration\AssignR
* @param string $name
* @param string $address
* @param string $email
* @param string $snid
* @return Manifest\GetContractsResult
* @see https://wiki.finkok.com/doku.php?id=get_contracts
* @see https://wiki.finkok.com/doku.php?id=get_contracts_snid
*/
public function customerGetContracts(
string $rfc,
string $name,
string $address,
string $email
string $email,
string $snid
): Manifest\GetContractsResult {
$command = new Manifest\GetContractsCommand($rfc, $name, $address, $email);
$command = new Manifest\GetContractsCommand($rfc, $name, $address, $email, $snid);
$service = new Manifest\GetContractsService($this->settings());
return $service->obtainContracts($command);
}
Expand Down Expand Up @@ -456,7 +458,7 @@ public function customerSignAndSendContracts(
$rfc = $fiel->rfc();
$name = $fiel->legalName();
$signedOn = $signedOn ?? new DateTimeImmutable();
$documents = $this->customerGetContracts($rfc, $name, $address, $email);
$documents = $this->customerGetContracts($rfc, $name, $address, $email, $snid);
if (! $documents->success()) {
return Manifest\SignContractsResult::createFromData(
false,
Expand Down Expand Up @@ -529,7 +531,7 @@ public function retentionStamped(string $preCfdi): Retentions\StampedResult
}

/**
* Este método es el encargado de cancelar un CFDIs de retenciones emitido por medio de los web services de Finkok
* Este método es el encargado de cancelar un CFDI de retenciones emitido por medio de los web services de Finkok
* Durante el proceso no se envía ningún CSD a Finkok y la solicitud firmada es creada usando los datos del CSD
*
* @param Credential $credential
Expand Down
11 changes: 10 additions & 1 deletion src/Services/Manifest/GetContractsCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@ class GetContractsCommand
/** @var string */
private $email;

public function __construct(string $rfc, string $name, string $address, string $email)
/** @var string */
private $snid;

public function __construct(string $rfc, string $name, string $address, string $email, string $snid)
{
$this->rfc = $rfc;
$this->name = $name;
$this->address = $address;
$this->email = $email;
$this->snid = $snid;
}

public function rfc(): string
Expand All @@ -45,4 +49,9 @@ public function email(): string
{
return $this->email;
}

public function snid(): string
{
return $this->snid;
}
}
4 changes: 2 additions & 2 deletions src/Services/Manifest/GetContractsResult.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ class GetContractsResult extends AbstractResult
{
public function __construct(stdClass $data)
{
parent::__construct($data, 'get_contractsResult');
parent::__construct($data, 'get_contracts_snidResult');
}

public static function createFromData(bool $success, string $contract, string $privacy, string $error): self
{
return new self((object) [
'get_contractsResult' => (object) [
'get_contracts_snidResult' => (object) [
'success' => $success,
'contract' => base64_encode($contract),
'privacy' => base64_encode($privacy),
Expand Down
3 changes: 2 additions & 1 deletion src/Services/Manifest/GetContractsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public function obtainContracts(GetContractsCommand $command): GetContractsResul
{
// this empty string are for ommiting sending username and password
$soapCaller = $this->settings()->createCallerForService(Services::manifest(), '', '');
$rawResponse = $soapCaller->call('get_contracts', [
$rawResponse = $soapCaller->call('get_contracts_snid', [
'snid' => $command->snid(),
'taxpayer_id' => $command->rfc(),
'name' => $command->name(),
'address' => $command->address(),
Expand Down
Loading