En España, cuando realizamos un proyecto en laravel, como una tienda virtual y necesitamos conectar las compras redsys con laravel pensamos en buscar módulos que nos puedan ayudar.
Para Laravel hay un módulo que nos ayuda mucho con la integración el cual dejo el link aqui Sobre ese modulo vamos a retocar un poco su configuración y a aportar más documentación de la que proporciona para que la adaptación sea más limpia y fácil.
Instalando Modulo Redsys en Laravel
para este ejemplo usaremos la versión más reciente que ha sido hecho el módulo.
[code lang=»cmd»]
$ composer require «ssheduardo/redsys-laravel=~1.4″
[/code]
Esto funciona con las versiones 6, 7 y 8 de Laravel.
Para versiones anteriores os dejo este listado:
[code lang=»cmd»]
$ composer require «ssheduardo/redsys-laravel=1.0.*»
[/code]
Para Laravel 5.1
[code lang=»cmd»]
$ composer require «ssheduardo/redsys-laravel=~1.1.0»
[/code]
Para Laravel del 5.2 al 5.4
[code lang=»cmd»]
$ composer require «ssheduardo/redsys-laravel=~1.3.0»
[/code]
Para Laravel del 5.5 al 5.8
Luego deberías ejecutar artisan para obtener las configuraciones del modulo
[code lang=»cmd»]php artisan vendor:publish –provider=»SsheduardoRedsysRedsysServiceProvider»[/code]
Si trabajas con una versión inferior a la 5.5 deberías hacer los siguientes pasos:
Debemos cargar nuestro Services Provider dentro del array ‘providers’ (config/app.php)
[code lang=»php»]
SsheduardoRedsysRedsysServiceProvider::class
[/code]
Creamos un alias dentro del array ‘aliases’ (config/app.php)
[code lang=»php»]
‘Redsys’ => SsheduardoRedsysFacadesRedsys::class,
[/code]
Ahora que tenemos todo listo, pasamos a la parte interesante.
Configurando el Módulo con tu proyecto
Los datos que usaremos de prueba no será los mismos de producción. por lo tanto debemos generar una pequeña configuración a este módulo.
Para empezar en nuestro archivo de configuración de redsys (/config/redsys.php) encontraremos lo siguiente:
[code lang=»php»]
<?php
return [
‘key’ => »,
‘url_notification’ => »,
‘url_ok’ => »,
‘url_ko’ => »,
];
[/code]
Vamos a agregarles unas variables nuevas
[code lang=»php»]
<?php
return [
‘key’=> env(‘REDSYS_KEY’,»),
‘url_ok’=> env(‘REDSYS_URL_OK’,»),
‘url_ko’=> env(‘REDSYS_URL_KO’,»),
‘merchantcode’=> env(‘REDSYS_MERCHANT_CODE’,»),
‘terminal’=> env(‘REDSYS_TERMINAL’,’2′),
‘enviroment’=> env(‘REDSYS_ENVIROMENT’,’test’),
‘url_notification’=> env(‘REDSYS_URL_NOTIFICATION’,»),
‘tradename’=> env(‘REDSYS_TRADENAME’,»),
‘titular’=> env(‘REDSYS_TITULAR’,»),
‘description’=> env(‘REDSYS_DESCRIPTION’,»)
];
[/code]
usaremos la función ENV para obtener los valores del archivo .env (puedes ver más detalles aqui) que serán los datos que necesitaremos y que pondremos en nuestro archivo .env para diferenciarlos de producción a desarrollo.
Creando el controlador para Redsys
Para ello vamos a la consola y creamos
[code lang=»php»]
php artisan make:controller RedsysController
[/code]
y agregaremos algunas cosas al inicio del controlador
[code lang=»php»]
use IlluminateHttpRequest;
use AppHttpRequests; // para recibir la notificación via request
use SsheduardoRedsysFacadesRedsys; //el controlador de redsys
[/code]
creamos la función index del controlador
[code lang=»php»]
/**
* Crear formulario redsys
*
*/
public static function index($order,$amount,$display=true,$des=false)
{
try{
$order = str_pad($order,12,0,STR_PAD_LEFT);
$key = config(‘redsys.key’);
$merchantcode = config(‘redsys.merchantcode’);
$terminal = config(‘redsys.terminal’);
$enviroment = config(‘redsys.enviroment’);
$urlOk = url(config(‘redsys.url_ok’));
$urlKo = url(config(‘redsys.url_ko’));
$urlNotification= url(config(‘redsys.url_notification’));
$tradeName = config(‘redsys.tradename’);
$titular = config(‘redsys.titular’);
$description = $des?$des:config(‘redsys.description’);
Redsys::setAmount($amount);
Redsys::setOrder($order);
Redsys::setMerchantcode($merchantcode);
Redsys::setCurrency(‘978’);
Redsys::setTransactiontype(‘0’);
Redsys::setTerminal($terminal);
Redsys::setMethod(‘T’);
Redsys::setNotification(config(‘redsys.url_notification’));
Redsys::setUrlOk(config(‘redsys.url_ok’));
Redsys::setUrlKo(config(‘redsys.url_ko’));
Redsys::setVersion(‘HMAC_SHA256_V1’);
Redsys::setTradeName($tradeName);
Redsys::setTitular($titular);
Redsys::setProductDescription($description);
Redsys::setEnviroment($enviroment);
$signature = Redsys::generateMerchantSignature($key);
Redsys::setMerchantSignature($signature);
if($display==false){
Redsys::setAttributesSubmit(‘btn_submit’, ‘btn_id’, ‘Enviar’, ‘display:none’);
return Redsys::executeRedirection();
}else{
return Redsys::createForm();
}
}
catch(Exception $e){
echo $e->getMessage();
}
}
[/code]
con esta función podemos crear un boton de compra para que vaya a redsys con los datos necesarios:
$order: el número de orden del pedido
$amount: la cantidad a cobrar
$display: si quieres que se muestre el boton o que directamente se redireccione a redsys
$des: una descripción sobre el pedido ( Si se deja en blanco se coloca la que por defecto pusiste en el archivo .env)
un ejemplo para llamar a la función desde cualquier controlador
[code lang=»php»]
$redsys= new AppHttpControllersRedsysController;
$redsys->index(512,50,false,’Compra de entradas’);
[/code]
o en blade
[code lang=»php»]
{{AppHttpControllersRedsysController::index(512,50,false,’Compra de entradas’)}}
[/code]
Para comprobar la confirmación de redsys creamos una función dentro del controlador
[code lang=»php»]
/**
* Comprobar respuesta de Redsys
*/
public function comprobar(Request $request)
{
try{
$key = config(‘redsys.key’);
$parameters = Redsys::getMerchantParameters($request->input(‘Ds_MerchantParameters’));
$DsResponse = $parameters[«Ds_Response»];
$DsResponse += 0;
if (Redsys::check($key, $request->input()) && $DsResponse <=99) {
// lo que quieras que haya si es positiva la confirmación de redsys
} else {
//lo que quieras que haga si no es positivo
}
} catch (SermepaTpvTpvException $e) {
echo $e->getMessage();
}
}
}
[/code]
Y luego en nuestra ruta colocamos
[code lang=»php»]
/**
* Comprobar redsys
*/
Route::post(‘/redsys/notification’,’RedsysController@comprobar’);
Route::get(‘/redsys/notification’,’RedsysController@comprobar’);
[/code]
con esto tienes todo cubierto para crear un sistema limpio y ordenado de Redsys.
Si te a gustado no olvide compartirlo con otros compañeros!!

Recuerda que puedes contar con nosotros para solucionar los problemas que tengas con tu proyecto o página web. Rellena el formulario y nos pondremos en contacto contigo





