freshworkstudio / transbank-web-services

DEPREACDO: Transbank Web Services SDK. Webpay OneClick, PatPass y Transacción Normal unsando SOAP

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Laravel: "La página web ha expirado, debido a inactividad"

ErSoul opened this issue · comments

El problema se presenta cuando debe reenviarme a la primera url de redirección con initTransaction()

Actualmente tengo así:

$response = $webpay->initTransaction(route('transfer.result'), route('transfer.final'));

Hasta acá, va a la página de webpay, recibe los parámetros indicados, y en teoría procesa hasta donde uno introduce el RUT.

En ese punto (luego de la autorizacion con el RUT), es cuando me debe redirigir a la URL que apunta la ruta de transfer.result. (el cual está obviamente en el archivo routes/web.php.

Sin embargo, antes de llegar ahí (porque jamás entra al metódo del controlador, que es donde está la llamada al getTransactionResult()), me manda esto:

image

Este es el código que hace la llamada al initTransaction()

$bag = CertificationBagFactory::integrationWebpayNormal();
$webpay = TransbankServiceFactory::normal($bag);
$webpay->addTransactionDetail($total, $transfer->id);
$response = $webpay->initTransaction(route('transfer.result'), route('transfer.final'));
echo RedirectorHelper::redirectHTML($response->url, $response->token);

Acá la ruta de transfer.result dentro de web.php:
Route::post('/transfer/result', 'TransferController@result')->name('transfer.result');

Y este es el contenido del método result en el controlador:

$bag = CertificationBagFactory::integrationWebpayNormal();
$plus = TransbankServiceFactory::normal($bag);
$response = $plus->getTransactionResult();
if ($response->detailOutput->responseCode == 0)
            $plus->acknowledgeTransaction();
return RedirectorHelper::redirectBackNormal($response->urlRedirection);

La excepción que lanza cuando llega a esa página, es un problema aparentemente con el csfrToken, el cual diverge con lo que está guardado en la cookie:

image

Solución en la documentación de Laravel:
https://laravel.com/docs/5.8/csrf#csrf-excluding-uris

Se añade la ruta en el array de $except y soluciona el problema.

El problema es que si transbank no envía el CSRF token cualquier sesión que el usuario tenga abierta se le cerrará, por lo tanto es incómodo para el usuario volver a iniciar sesión. Ya existe alguna solución que repare esto?

Oh gracias!!! en que parte puedo configurar eso en laravel?

Hola! Sé que este bug está cerrado, pero no logro hacer funcionar la solución del post. ¿Alguien ha tenido éxito con esto?