Skip to content

Commit 1fd560d

Browse files
authored
Merge pull request #35 from eclipxe13/version-0.5.0
Version 0.5.0 - Fix get_contracts and psr/log dependency
2 parents 960e3d5 + b65d91f commit 1fd560d

25 files changed

Lines changed: 215 additions & 82 deletions

.github/workflows/build.yml

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,23 @@ on:
99

1010
jobs:
1111

12+
composer-normalize:
13+
name: Composer normalization
14+
runs-on: "ubuntu-latest"
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v3
18+
- name: Setup PHP
19+
uses: shivammathur/setup-php@v2 # see https://github.com/marketplace/actions/setup-php-action
20+
with:
21+
php-version: '8.1'
22+
coverage: none
23+
tools: composer-normalize
24+
env:
25+
fail-fast: true
26+
- name: Composer normalize
27+
run: composer-normalize
28+
1229
phpcs:
1330
name: Code style (phpcs)
1431
runs-on: "ubuntu-latest"
@@ -20,7 +37,7 @@ jobs:
2037
with:
2138
php-version: '8.1'
2239
coverage: none
23-
tools: composer:v2, cs2pr, phpcs
40+
tools: cs2pr, phpcs
2441
env:
2542
fail-fast: true
2643
- name: Code style (phpcs)
@@ -37,7 +54,7 @@ jobs:
3754
with:
3855
php-version: '8.1'
3956
coverage: none
40-
tools: composer:v2, cs2pr, php-cs-fixer
57+
tools: cs2pr, php-cs-fixer
4158
env:
4259
fail-fast: true
4360
- name: Code style (php-cs-fixer)
@@ -54,7 +71,7 @@ jobs:
5471
with:
5572
php-version: '8.1'
5673
coverage: none
57-
tools: composer:v2, cs2pr, phpstan
74+
tools: composer:v2, phpstan
5875
extensions: soap
5976
env:
6077
fail-fast: true

.phive/phars.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
<phar name="phpcbf" version="^3.7.1" installed="3.7.1" location="./tools/phpcbf" copy="false"/>
55
<phar name="php-cs-fixer" version="^3.9.5" installed="3.9.5" location="./tools/php-cs-fixer" copy="false"/>
66
<phar name="phpstan" version="^1.8.2" installed="1.8.2" location="./tools/phpstan" copy="false"/>
7+
<phar name="composer-normalize" version="^2.28.3" installed="2.28.3" location="./tools/composer-normalize" copy="false"/>
78
</phive>

composer.json

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,47 @@
11
{
22
"name": "phpcfdi/finkok",
33
"description": "Librería para conectar con la API de servicios de FINKOK",
4-
"keywords": ["phpcfdi", "sat", "cfdi", "finkok"],
5-
"homepage": "https://github.com/phpcfdi/finkok",
64
"license": "MIT",
5+
"keywords": [
6+
"phpcfdi",
7+
"sat",
8+
"cfdi",
9+
"finkok"
10+
],
711
"authors": [
812
{
913
"name": "Carlos C Soto",
1014
"email": "eclipxe13@gmail.com",
1115
"homepage": "https://eclipxe.com.mx/"
1216
}
1317
],
18+
"homepage": "https://github.com/phpcfdi/finkok",
1419
"support": {
15-
"source": "https://github.com/phpcfdi/finkok",
16-
"issues": "https://github.com/phpcfdi/finkok/issues"
17-
},
18-
"prefer-stable": true,
19-
"config": {
20-
"optimize-autoloader": true,
21-
"preferred-install": {
22-
"*": "dist"
23-
}
20+
"issues": "https://github.com/phpcfdi/finkok/issues",
21+
"source": "https://github.com/phpcfdi/finkok"
2422
},
2523
"require": {
2624
"php": ">=7.3",
27-
"ext-json": "*",
28-
"ext-soap": "*",
2925
"ext-dom": "*",
26+
"ext-json": "*",
3027
"ext-openssl": "*",
31-
"psr/log": "^1.1",
28+
"ext-soap": "*",
3229
"eclipxe/enum": "^0.2.0",
30+
"eclipxe/micro-catalog": "^0.1.0",
31+
"phpcfdi/cfdi-expresiones": "^3.2",
3332
"phpcfdi/credentials": "^1.0.1",
3433
"phpcfdi/xml-cancelacion": "^2.0.1",
35-
"robrichards/xmlseclibs": "^3.0.4",
36-
"eclipxe/micro-catalog": "^0.1.0",
37-
"phpcfdi/cfdi-expresiones": "^3.2"
34+
"psr/log": "^1.1 || ^2.0 || ^3.0",
35+
"robrichards/xmlseclibs": "^3.0.4"
3836
},
3937
"require-dev": {
4038
"ext-fileinfo": "*",
41-
"symfony/dotenv": "^5.1",
4239
"eclipxe/cfdiutils": "^2.23.2",
43-
"phpunit/phpunit": "^9.5.10"
40+
"phpcfdi/rfc": "^1.1",
41+
"phpunit/phpunit": "^9.5.10",
42+
"symfony/dotenv": "^5.1 || ^6.0"
4443
},
44+
"prefer-stable": true,
4545
"autoload": {
4646
"psr-4": {
4747
"PhpCfdi\\Finkok\\": "src/"
@@ -52,29 +52,41 @@
5252
"PhpCfdi\\Finkok\\Tests\\": "tests/"
5353
}
5454
},
55+
"config": {
56+
"optimize-autoloader": true,
57+
"preferred-install": {
58+
"*": "dist"
59+
}
60+
},
5561
"scripts": {
56-
"dev:build": ["@dev:fix-style", "@dev:check-style", "@dev:test"],
62+
"dev:build": [
63+
"@dev:fix-style",
64+
"@dev:check-style",
65+
"@dev:test"
66+
],
5767
"dev:check-style": [
68+
"@php tools/composer-normalize normalize --dry-run",
5869
"@php tools/php-cs-fixer fix --dry-run --verbose",
5970
"@php tools/phpcs --colors -sp"
6071
],
72+
"dev:coverage": [
73+
"@php -dzend_extension=xdebug.so vendor/bin/phpunit --verbose --coverage-html build/coverage/html/"
74+
],
6175
"dev:fix-style": [
76+
"@php tools/composer-normalize normalize",
6277
"@php tools/php-cs-fixer fix --verbose",
6378
"@php tools/phpcbf --colors -sp"
6479
],
6580
"dev:test": [
6681
"@php vendor/bin/phpunit --testdox --verbose --stop-on-failure tests/Unit",
6782
"@php tools/phpstan analyse --no-progress --verbose"
68-
],
69-
"dev:coverage": [
70-
"@php -dzend_extension=xdebug.so vendor/bin/phpunit --verbose --coverage-html build/coverage/html/"
7183
]
7284
},
7385
"scripts-descriptions": {
7486
"dev:build": "DEV: run dev:fix-style dev:check-style and dev:tests, run before pull request",
75-
"dev:check-style": "DEV: search for code style errors using php-cs-fixer and phpcs",
76-
"dev:fix-style": "DEV: fix code style errors using php-cs-fixer and phpcbf",
77-
"dev:test": "DEV: run phpunit and phpstan",
78-
"dev:coverage": "DEV: run phpunit with xdebug and storage coverage in build/coverage/html/"
87+
"dev:check-style": "DEV: search for code style errors using composer-normalize, php-cs-fixer and phpcs",
88+
"dev:coverage": "DEV: run phpunit with xdebug and storage coverage in build/coverage/html/",
89+
"dev:fix-style": "DEV: fix code style errors using composer-normalize, php-cs-fixer and phpcbf",
90+
"dev:test": "DEV: run phpunit and phpstan"
7991
}
8092
}

docs/CHANGELOG.md

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,65 @@
22

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

5-
## Unreleased 2022-08-08
5+
## Versión 0.5.0 2022-08-12
6+
7+
### Implementación del método `get_contracts_sndi`
8+
9+
Se utiliza el nuevo método `get_contracts_sndi` en lugar del obsoleto `get_contracts`.
10+
Esto lleva a que la clase `PhpCfdi\Finkok\Services\Manifest\GetContractsCommand` ahora requiere de `$snid`.
11+
Igualmente, `PhpCfdi\Finkok\QuickFinkok#customerGetContracts()` requiere de `$snid`.
12+
13+
### Mejorar la dependencia de `PSR-3`
14+
15+
Ahora se permite compatibilidad del paquete `psr/log` con las versiones `^1.1`, `^2.0` o `^3.0`.
16+
17+
### Mejorar la dependencia de `symfony/dotenv`
18+
19+
Se permite la compatibilidad de desarrollo de la librería `symfony/dotenv` con `^5.0` o `^6.0`.
20+
21+
### Saltar las pruebas de integración de cancelación que fallen
22+
23+
A menudo el servicio de pruebas del SAT relacionado con cancelaciones presenta fallas.
24+
Por esto, las pruebas de integración relacionadas con tocar este servicio,
25+
en lugar de marcarlas como fallidas se marcarán como brincadas.
26+
27+
- `PhpCfdi\Finkok\Tests\Integration\Services\Cancel\CancelServicesTest::testCreateCfdiThenGetSatStatusThenCancelSignatureThenGetReceipt()`.
28+
- `PhpCfdi\Finkok\Tests\Integration\Services\Cancel\GetRelatedSignatureServiceTest::testConsumeServiceWithRelated()`.
29+
- `PhpCfdi\Finkok\Tests\Integration\Services\Retentions\CancelSignatureServiceTest::testCancelSignatureRecentlyCreatedDocument()`.
30+
31+
### Pruebas largas tienen duración definida
32+
33+
Las pruebas largas que reintentan varias veces una tarea ahora tienen un límite de tiempo definido en la variable
34+
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.
35+
36+
### Búsqueda de RFC libre en pruebas
37+
38+
Se implementa una búsqueda binaria en un espacio consecutivo de RFC para hacer únicamente 16 búsquedas.
39+
Anteriormente, se usaba un espacio que podía conducir a muchas más búsquedas y la prueba
40+
`PhpCfdi\Finkok\Tests\Integration\Services\Registration\AddServiceTest::testConsumeAddServiceWithRandomRfc`
41+
no era ejecutada a menos que se permitieran pruebas de larga duración.
42+
43+
### Normalización de `composer.json`
44+
45+
Se incluye la herramienta `composer-normalize` para revisar y normalizar el archivo `composer.json`.
46+
47+
### Se integran los cambios previos no liberados
48+
49+
#### 2022-08-08
650

751
Corregir el proceso de construcción:
852

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

12-
## Unreleased 2022-07-18
56+
#### 2022-07-18
1357

1458
Corregir el proceso de construcción:
1559

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

19-
## Unreleased 2022-07-04
63+
#### 2022-07-04
2064

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

docs/ListadoDeServicios.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Estos servicios son de CFDI de retenciones e información de pagos (RET).
6464

6565
## Manifiesto de Finkok
6666

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

7070
## Servicios que no se implementarán

docs/PruebasDeIntegracionContinua.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Para desencriptar el archivo de configuración `tests/.env-testing.enc -> tests/
4545
comando. Esta operación es la que se ejecuta en `functional-test.yml` usando el secreto `secrets.ENV_GPG_SECRET`.
4646

4747
```shell
48-
gpg --quiet --batch --yes --decrypt --output decoded tests/.env-testing.enc
48+
gpg --quiet --batch --yes --decrypt --output - tests/.env-testing.enc
4949
```
5050

5151
### Cobertura de código

src/QuickFinkok.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function stamp(string $preCfdi): Stamping\StampingResult
5656
/**
5757
* Este método se encarga de realizar el timbrado de XML, una vez que se timbra el XML se guarda en una cola de
5858
* espera para ser enviado en el mejor momento a los servicios del SAT, por lo que el servicio de timbrado es
59-
* mucho mas rápido, y es de uso recomendado en timbrado de alto numero de timbres por segundo.
59+
* mucho más rápido, y es de uso recomendado en timbrado de alto número de timbres por segundo.
6060
*
6161
* Nota: El CFDI generado puede no estar disponible en los servidores del SAT hasta varios minutos después
6262
*
@@ -103,7 +103,7 @@ public function cfdiDownload(string $uuid, string $rfc): Utilities\DownloadXmlRe
103103
}
104104

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

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

177177
/**
178-
* Obtiene una lista de los UUIDs relacionados de un UUID
178+
* Obtiene una lista de los UUID relacionados de un UUID
179179
*
180180
* @param Credential $credential
181181
* @param string $uuid
182-
* @param RfcRole|null $role si es NULL entonces se usa el rol de emisor
182+
* @param RfcRole|null $role Si es NULL entonces se usa el rol de emisor
183183
* @return Cancel\GetRelatedSignatureResult
184184
* @see https://wiki.finkok.com/doku.php?id=get_related_signature
185185
* @see https://wiki.finkok.com/doku.php?id=get_related
@@ -403,16 +403,18 @@ public function customersAssign(string $rfc, int $credits): Registration\AssignR
403403
* @param string $name
404404
* @param string $address
405405
* @param string $email
406+
* @param string $snid
406407
* @return Manifest\GetContractsResult
407-
* @see https://wiki.finkok.com/doku.php?id=get_contracts
408+
* @see https://wiki.finkok.com/doku.php?id=get_contracts_snid
408409
*/
409410
public function customerGetContracts(
410411
string $rfc,
411412
string $name,
412413
string $address,
413-
string $email
414+
string $email,
415+
string $snid
414416
): Manifest\GetContractsResult {
415-
$command = new Manifest\GetContractsCommand($rfc, $name, $address, $email);
417+
$command = new Manifest\GetContractsCommand($rfc, $name, $address, $email, $snid);
416418
$service = new Manifest\GetContractsService($this->settings());
417419
return $service->obtainContracts($command);
418420
}
@@ -456,7 +458,7 @@ public function customerSignAndSendContracts(
456458
$rfc = $fiel->rfc();
457459
$name = $fiel->legalName();
458460
$signedOn = $signedOn ?? new DateTimeImmutable();
459-
$documents = $this->customerGetContracts($rfc, $name, $address, $email);
461+
$documents = $this->customerGetContracts($rfc, $name, $address, $email, $snid);
460462
if (! $documents->success()) {
461463
return Manifest\SignContractsResult::createFromData(
462464
false,
@@ -529,7 +531,7 @@ public function retentionStamped(string $preCfdi): Retentions\StampedResult
529531
}
530532

531533
/**
532-
* Este método es el encargado de cancelar un CFDIs de retenciones emitido por medio de los web services de Finkok
534+
* Este método es el encargado de cancelar un CFDI de retenciones emitido por medio de los web services de Finkok
533535
* Durante el proceso no se envía ningún CSD a Finkok y la solicitud firmada es creada usando los datos del CSD
534536
*
535537
* @param Credential $credential

src/Services/Manifest/GetContractsCommand.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ class GetContractsCommand
1818
/** @var string */
1919
private $email;
2020

21-
public function __construct(string $rfc, string $name, string $address, string $email)
21+
/** @var string */
22+
private $snid;
23+
24+
public function __construct(string $rfc, string $name, string $address, string $email, string $snid)
2225
{
2326
$this->rfc = $rfc;
2427
$this->name = $name;
2528
$this->address = $address;
2629
$this->email = $email;
30+
$this->snid = $snid;
2731
}
2832

2933
public function rfc(): string
@@ -45,4 +49,9 @@ public function email(): string
4549
{
4650
return $this->email;
4751
}
52+
53+
public function snid(): string
54+
{
55+
return $this->snid;
56+
}
4857
}

src/Services/Manifest/GetContractsResult.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ class GetContractsResult extends AbstractResult
1111
{
1212
public function __construct(stdClass $data)
1313
{
14-
parent::__construct($data, 'get_contractsResult');
14+
parent::__construct($data, 'get_contracts_snidResult');
1515
}
1616

1717
public static function createFromData(bool $success, string $contract, string $privacy, string $error): self
1818
{
1919
return new self((object) [
20-
'get_contractsResult' => (object) [
20+
'get_contracts_snidResult' => (object) [
2121
'success' => $success,
2222
'contract' => base64_encode($contract),
2323
'privacy' => base64_encode($privacy),

src/Services/Manifest/GetContractsService.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ public function obtainContracts(GetContractsCommand $command): GetContractsResul
2626
{
2727
// this empty string are for ommiting sending username and password
2828
$soapCaller = $this->settings()->createCallerForService(Services::manifest(), '', '');
29-
$rawResponse = $soapCaller->call('get_contracts', [
29+
$rawResponse = $soapCaller->call('get_contracts_snid', [
30+
'snid' => $command->snid(),
3031
'taxpayer_id' => $command->rfc(),
3132
'name' => $command->name(),
3233
'address' => $command->address(),

0 commit comments

Comments
 (0)