Skip to content

Commit 01764aa

Browse files
committed
I have just added a new test to handle successful or error responses from the Redsys payment gateway, Updated README
1 parent dcf4949 commit 01764aa

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

CHANGELOG.md

+11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22

33
All Notable changes to `Redsys` will be documented in this file
44

5+
## Version 1.5.1 (2025-01-23)
6+
### Added
7+
- Added a new test to handle successful responses from the Redsys payment gateway.
8+
- Updated README with additional information about errorCode verification and the usage of the MIT parameter.
9+
10+
### Changed
11+
- None
12+
13+
### Fixed
14+
- None
15+
516
## Version 1.5.0 (2025-01-16)
617
### Added
718
- None

README.md

+20-1
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,14 @@ Si no queremos que nos muestre ninguna pantalla y directamente realice el pago d
236236
$redsys->setMerchantDirectPayment(true);
237237
```
238238
También podemos hacer los cobros recurrentes a traves de Rest.
239+
240+
_Nota: En algunos casos dependiendo del Banco, debemos enviar el parámetro MIT_
241+
242+
```php
243+
$parameters = ['DS_MERCHANT_EXCEP_SCA' => 'MIT'];
244+
$redsys->setParameters($parameters);
245+
```
246+
239247
```php
240248
try{
241249
//Key de ejemplo
@@ -262,9 +270,18 @@ try{
262270

263271
$response = json_decode($redsys->send(), true);
264272

273+
// Verifica si hay un error en la respuesta
274+
if (array_key_exists('errorCode', $response)) {
275+
// Si en el response nos retorna un error, aquí podemos gestionarlo.
276+
throw new Exception("Error en la respuesta: " . $response['errorCode']);
277+
}
278+
279+
// Obtiene los parámetros del comerciante
265280
$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
266281
$DsResponse = $parameters["Ds_Response"];
267282
$DsResponse += 0;
283+
284+
// Verifica la respuesta y la clave
268285
if ($redsys->check($key, $response) && $DsResponse <= 99) {
269286
//Si es todo correcto ya podemos hacer lo que necesitamos, para este ejemplo solo mostramos los datos.
270287
print_r($parameters);
@@ -273,7 +290,9 @@ try{
273290
}
274291

275292
} catch (\Sermepa\Tpv\TpvException $e) {
276-
echo $e->getMessage();
293+
echo "Error de TPV: " . $e->getMessage();
294+
} catch (Exception $e) {
295+
echo "Error: " . $e->getMessage();
277296
}
278297

279298
```

tests/TpvResponseTest.php

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Sermepa\Tpv;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use Sermepa\Tpv\Tpv;
9+
10+
class TpvResponseTest extends TestCase
11+
{
12+
13+
public function test_response_error_code()
14+
{
15+
$response = [
16+
'errorCode' => '123'
17+
];
18+
19+
$key = 'YOUR_KEY';
20+
21+
$redsys = $this->createMock(Tpv::class);
22+
$redsys->method('getMerchantParameters')->willReturn(['Ds_Response' => '00']);
23+
$redsys->method('check')->willReturn(true);
24+
25+
try {
26+
27+
if (array_key_exists('errorCode', $response)) {
28+
throw new \Exception("Error en la respuesta: " . $response['errorCode']);
29+
} else {
30+
$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
31+
$DsResponse = $parameters["Ds_Response"];
32+
$DsResponse += 0;
33+
if ($redsys->check($key, $response) && $DsResponse <= 99) {
34+
print_r($parameters);
35+
} else {
36+
throw new \Exception("Error en la verificación de la respuesta.");
37+
}
38+
}
39+
} catch (\Exception $e) {
40+
$this->assertEquals("Error en la respuesta: 123", $e->getMessage());
41+
}
42+
}
43+
44+
public function test_successful_response()
45+
{
46+
$response = [
47+
'Ds_MerchantParameters' => 'encodedParams',
48+
'Ds_Signature' => 'signature'
49+
];
50+
51+
$key = 'YOUR_KEY';
52+
53+
$redsys = $this->createMock(Tpv::class);
54+
$redsys->method('getMerchantParameters')->willReturn([
55+
'Ds_Response' => '00',
56+
'Ds_MerchantParameters' => 'param'
57+
]);
58+
59+
$redsys->method('check')->willReturn(true);
60+
61+
try {
62+
if (array_key_exists('errorCode', $response)) {
63+
throw new \Exception("Error en la respuesta: " . $response['errorCode']);
64+
} else {
65+
$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
66+
$DsResponse = $parameters["Ds_Response"];
67+
$DsResponse += 0;
68+
if ($redsys->check($key, $response) && $DsResponse <= 99) {
69+
$this->assertTrue(true); // Success
70+
} else {
71+
throw new \Exception("Error en la verificación de la respuesta.");
72+
}
73+
}
74+
} catch (\Exception $e) {
75+
$this->fail("No se esperaba una excepción: " . $e->getMessage());
76+
}
77+
}
78+
}

tests/TpvTest.php

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
declare(strict_types=1);
23

34
namespace Sermepa\Tpv;
45

0 commit comments

Comments
 (0)