Skip to content

Commit

Permalink
I have just added a new test to handle successful or error responses …
Browse files Browse the repository at this point in the history
…from the Redsys payment gateway, Updated README
  • Loading branch information
ssheduardo committed Jan 23, 2025
1 parent dcf4949 commit 01764aa
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 1 deletion.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

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

## Version 1.5.1 (2025-01-23)
### Added
- Added a new test to handle successful responses from the Redsys payment gateway.
- Updated README with additional information about errorCode verification and the usage of the MIT parameter.

### Changed
- None

### Fixed
- None

## Version 1.5.0 (2025-01-16)
### Added
- None
Expand Down
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,14 @@ Si no queremos que nos muestre ninguna pantalla y directamente realice el pago d
$redsys->setMerchantDirectPayment(true);
```
También podemos hacer los cobros recurrentes a traves de Rest.

_Nota: En algunos casos dependiendo del Banco, debemos enviar el parámetro MIT_

```php
$parameters = ['DS_MERCHANT_EXCEP_SCA' => 'MIT'];
$redsys->setParameters($parameters);
```

```php
try{
//Key de ejemplo
Expand All @@ -262,9 +270,18 @@ try{

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

// Verifica si hay un error en la respuesta
if (array_key_exists('errorCode', $response)) {
// Si en el response nos retorna un error, aquí podemos gestionarlo.
throw new Exception("Error en la respuesta: " . $response['errorCode']);
}

// Obtiene los parámetros del comerciante
$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
$DsResponse = $parameters["Ds_Response"];
$DsResponse += 0;

// Verifica la respuesta y la clave
if ($redsys->check($key, $response) && $DsResponse <= 99) {
//Si es todo correcto ya podemos hacer lo que necesitamos, para este ejemplo solo mostramos los datos.
print_r($parameters);
Expand All @@ -273,7 +290,9 @@ try{
}

} catch (\Sermepa\Tpv\TpvException $e) {
echo $e->getMessage();
echo "Error de TPV: " . $e->getMessage();
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}

```
Expand Down
78 changes: 78 additions & 0 deletions tests/TpvResponseTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php

declare(strict_types=1);

namespace Sermepa\Tpv;

use PHPUnit\Framework\TestCase;
use Sermepa\Tpv\Tpv;

class TpvResponseTest extends TestCase
{

public function test_response_error_code()
{
$response = [
'errorCode' => '123'
];

$key = 'YOUR_KEY';

$redsys = $this->createMock(Tpv::class);
$redsys->method('getMerchantParameters')->willReturn(['Ds_Response' => '00']);
$redsys->method('check')->willReturn(true);

try {

if (array_key_exists('errorCode', $response)) {
throw new \Exception("Error en la respuesta: " . $response['errorCode']);
} else {
$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
$DsResponse = $parameters["Ds_Response"];
$DsResponse += 0;
if ($redsys->check($key, $response) && $DsResponse <= 99) {
print_r($parameters);
} else {
throw new \Exception("Error en la verificación de la respuesta.");
}
}
} catch (\Exception $e) {
$this->assertEquals("Error en la respuesta: 123", $e->getMessage());
}
}

public function test_successful_response()
{
$response = [
'Ds_MerchantParameters' => 'encodedParams',
'Ds_Signature' => 'signature'
];

$key = 'YOUR_KEY';

$redsys = $this->createMock(Tpv::class);
$redsys->method('getMerchantParameters')->willReturn([
'Ds_Response' => '00',
'Ds_MerchantParameters' => 'param'
]);

$redsys->method('check')->willReturn(true);

try {
if (array_key_exists('errorCode', $response)) {
throw new \Exception("Error en la respuesta: " . $response['errorCode']);
} else {
$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
$DsResponse = $parameters["Ds_Response"];
$DsResponse += 0;
if ($redsys->check($key, $response) && $DsResponse <= 99) {
$this->assertTrue(true); // Success
} else {
throw new \Exception("Error en la verificación de la respuesta.");
}
}
} catch (\Exception $e) {
$this->fail("No se esperaba una excepción: " . $e->getMessage());
}
}
}
1 change: 1 addition & 0 deletions tests/TpvTest.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php
declare(strict_types=1);

namespace Sermepa\Tpv;

Expand Down

0 comments on commit 01764aa

Please sign in to comment.