Skip to content

Commit

Permalink
Added new method to send data using rest, added github action, remove…
Browse files Browse the repository at this point in the history
… validation to 4 first
  • Loading branch information
ssheduardo committed Feb 22, 2022
1 parent 76530b5 commit cc32503
Show file tree
Hide file tree
Showing 9 changed files with 1,001 additions and 336 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Template - PHP Package
on:
push:
branches:
- master
- develop

jobs:
package-tests:
runs-on: ubuntu-latest

strategy:
matrix:
operating-system: [ubuntu-latest]
php-versions: ["8.0", "7.4", "7.3"]
dependency-stability: ["prefer-stable"]

name: P${{ matrix.php-versions }} - L${{ matrix.laravel }} - ${{ matrix.dependency-stability }} - ${{ matrix.operating-system}}

steps:
- uses: actions/checkout@v2
- name: Install PHP versions
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
- name: Install Dependencies
if: steps.vendor-cache.outputs.cache-hit != 'true'
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

- name: Update Dependencies with latest stable
if: matrix.dependency-stability == 'prefer-stable'
run: composer update --prefer-stable
- name: Update Dependencies with lowest stable
if: matrix.dependency-stability == 'prefer-lowest'
run: composer update --prefer-stable --prefer-lowest

- name: Show dir
run: pwd
- name: PHP Version
run: php --version

# Code quality
- name: Execute tests (Unit and Feature tests) via PHPUnit
# Set environment
env:
SESSION_DRIVER: array

run: vendor/bin/phpunit --testdox
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ Thumbs.db

.idea

# PHPUnit
/.phpunit.cache
.phpunit.result.cache

phpunit.xml
vendor
docker
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

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

## Version 1.4.0 (2022-02-22)

### Added
- Added new method: send using rest.
### Fixed
- setOrder, Allows you to add numbers and letters in the first 4.

## Version 1.3.0 (2020-12-05)

### Added
Expand Down
104 changes: 79 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ Válido para Sermepa y Redsys.

## Introducción

La clase `sermepa` sirve para generar el formulario que se comunicará con la pasarela de pagos que usan muchos bancos, como Sabadell, Lacaixa, etc.
La clase `sermepa` actualmente `Redsys` sirve para generar el formulario que se comunicará con la pasarela de pagos que usan muchos bancos, como Santander, Sabadell, Lacaixa, etc.

Es una versión que irá creciendo y actualizándose poco a poco y mejorándolo. Si lo usas en algún proyecto y te ayudo en algo no dudes en decírmelo

## Requerimientos mínimos

PHP 5 >= 5.3.0, PHP 7.1
PHP 5 >= 5.3.0, PHP 7.1, 8.0

## Créditos

Expand All @@ -41,6 +41,7 @@ Twitter: @eduardo_dx
- Se cambian todos los nombres de la clases a ingles.
- Se crean nuevos métodos.
- Para facilitar la integración usamos funciones ya creadas.
- Rest.

## Instalación

Expand All @@ -55,7 +56,7 @@ composer require sermepa/sermepa
```json
{
"require": {
"sermepa/sermepa": "^1.2"
"sermepa/sermepa": "^1.3.2"
}
}
```
Expand Down Expand Up @@ -170,63 +171,108 @@ $redsys->setIdentifier();
//En la url de notificación nos devolverá algo como esto
Array
(
[Ds_Date] => 20/10/2016
[Ds_Hour] => 13:06
[Ds_Date] => 17%2F02%2F2022
[Ds_Hour] => 23%3A25
[Ds_SecurePayment] => 1
[Ds_Card_Number] => 454881******0004

[Ds_ExpiryDate] => 2012
[Ds_Merchant_Identifier] => cd8e4017c4c2f16bc9ccff87b0d07ad9c6cbd257

[Ds_Card_Number] => 491801******4602
[Ds_ExpiryDate] => 3212
[Ds_Merchant_Identifier] => 2214a9c5ac0bd6e0fg476e6b3468ac4fa38a592c
[Ds_Card_Country] => 724
[Ds_Amount] => 47700
[Ds_Amount] => 0
[Ds_Currency] => 978
[Ds_Order] => 1476961526
[Ds_Order] => 1645136683
[Ds_MerchantCode] => 999008881
[Ds_Terminal] => 001
[Ds_Response] => 0000
[Ds_MerchantData] => Descripcion_del_pedido_extra
[Ds_MerchantData] =>
[Ds_TransactionType] => 0
[Ds_ConsumerLanguage] => 1
[Ds_AuthorisationCode] => 024772
[Ds_AuthorisationCode] => 005090
[Ds_Card_Brand] => 1
[Ds_Merchant_Cof_Txnid] => 2202172334011
[Ds_ProcessedPayMethod] => 1
[Ds_Control_1645136701458] => 1645136701458
)

```

Ahora bien, si queremos realizar otro cobro sin que nos pidan los datos de la tarjeta para ese mismo usuario, bastará con pasar el `Ds_Merchant_Identifier` anterior en el método `setIdentifier()`.

Cada banco tiene un sistema de seguridad a través de un código de SMS, tarjeta de coordenadas, etc. que se mostrará para completar la transacción.

```php
$redsys->setIdentifier(cd8e4017c4c2f16bc9ccff87b0d07ad9c6cbd257);
$redsys->setIdentifier(2214a9c5ac0bd6e0fg476e6b3468ac4fa38a592c);

//En la url de notificación nos devolverá algo como esto
Array
(
[Ds_Date] => 20/10/2016
[Ds_Hour] => 15:19
[Ds_Date] => 17%2F02%2F2022
[Ds_Hour] => 23%3A28
[Ds_SecurePayment] => 1
[Ds_Card_Number] => 454881******0004

[Ds_Merchant_Identifier] => cd8e4017c4c2f16bc9ccff87b0d07ad9c6cbd257

[Ds_Card_Number] => 491801******4602
[Ds_Merchant_Identifier] => 2214a9c5ac0bd6e0fg476e6b3468ac4fa38a592c
[Ds_Card_Country] => 724
[Ds_Amount] => 3200
[Ds_Amount] => 12000
[Ds_Currency] => 978
[Ds_Order] => 1476969550
[Ds_Order] => 1645136909
[Ds_MerchantCode] => 999008881
[Ds_Terminal] => 001
[Ds_Response] => 0000
[Ds_MerchantData] => Descripcion_del_pedido_extra
[Ds_MerchantData] =>
[Ds_TransactionType] => 0
[Ds_ConsumerLanguage] => 1
[Ds_AuthorisationCode] => 025483
[Ds_AuthorisationCode] => 078737
[Ds_Card_Brand] => 1
[Ds_Merchant_Cof_Txnid] => 2202172334011
[Ds_ProcessedPayMethod] => 1
[Ds_Control_1645136925978] => 1645136925978
)
```

Si no queremos que nos muestre ninguna pantalla y directamente realice el pago debemos hacer uso del método `setMerchantDirectPayment()`:

```php
$redsys->setMerchantDirectPayment(true);
```
También podemos hacer los cobros recurrentes a traves de Rest.
```php
try{
//Key de ejemplo
$key = 'sq7HjrUOBfKmC576ILgskD5srU870gJ7';

$redsys = new Sermepa\Tpv\Tpv();
$redsys->setAmount(rand(20,80));
$redsys->setOrder(time());
$redsys->setMerchantcode('999008881'); //Reemplazar por el código que proporciona el banco

$redsys->setCurrency('978');
$redsys->setTransactiontype('0');
$redsys->setTerminal('1');
$redsys->setIdentifier('2214a9c5ac0bd6e0fg476e6b3468ac4fa38a592c');
$redsys->setVersion('HMAC_SHA256_V1');
$redsys->setEnvironment('restTest'); //Rest entorno test
$redsys->setMerchantCofIni(false);
$redsys->setMerchantCofTxnid(2202172334011);

$signature = $redsys->generateMerchantSignature($key);
$redsys->setMerchantSignature($signature);

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

$parameters = $redsys->getMerchantParameters($response['Ds_MerchantParameters']);
$DsResponse = $parameters["Ds_Response"];
$DsResponse += 0;
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);
} else {
//acciones a realizar si ha sido erroneo
}

} catch (\Sermepa\Tpv\TpvException $e) {
echo $e->getMessage();
}

```

## Redirección automática
Expand Down Expand Up @@ -265,6 +311,14 @@ try{

Por defecto se conecta por la pasarela de pruebas. Para cambiar a un entorno real, usar el método `setEnvironment('live')`, con esto ya estará activo.

```php
Los entornos que tenemos son:
- test
- live
- restLive
- restTest
```

## Métodos útiles

### Asignar parámetros
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
}
],
"require": {
"php": ">=5.6"
"php": "^7.1.3|^7.2.5|^8.0"
},
"require-dev": {
"phpunit/phpunit": "^6"
"phpunit/phpunit": "^7.0|^8.5.8|^9.3.3"
},
"autoload": {
"psr-4": {
Expand Down
Loading

0 comments on commit cc32503

Please sign in to comment.