Closed danijmurcia closed 5 years ago
Buenas DaniMujica, Redsys nunca notificará a una URL que no sea públicamente accesible. Para recibirla necesitas un dominio.
Efectivamente lo que comenta @NilLlisterri, redsys necesita una URL publica para hacer el llamado, no puede hacerlo sobre la dirección 127.0.0.1 que es tu localhost. Espero te sirva @DaniJmurcia
No lo tengo subido a localhost, lo tengo subido a un servidor, perdón por la url de localhost, copié el archivo que tenia en local pero sigue devolviéndome lo mismo
Este es el metodo que llamo en:
$redsys->setNotification('https://.../api/public/api/payment/comprobar'); //Url de notificacion
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) {
$user = new User();
$user->password = '1234';
$user->email = 'asd@asd.com';
$user->rol_id = '1';
$user->save();
$user->success = true;
$user->msg = 'Usuario insertado correctamente';
} else {
$user = new User();
$user->password = '1234';
$user->email = 'asd@asd.com';
$user->rol_id = '1';
$user->save();
$user->success = true;
$user->msg = 'Usuario insertado correctamente';
}
} catch (\Exception $e) {
echo $e->getMessage();
}
}
Hola, ¿has probado a poner el $user->save(); después de $user->msg = 'Usuario insertado correctamente'; ?
Hola, al parecer ya he solucionado el problema es que estaba usando esta librería https://github.com/ssheduardo/sermepa en vez de https://github.com/ssheduardo/redsys-laravel o eso o tenia mal la URL de la notificación.
Lo que si tengo una pregunta en la URL de notificación como recojo la cantidad pagada ? $parameters->amount ? o $request->amount en la documentación de la pasarela de pago no dicen nada o no lo he encontrado
Un saludo
Creo que podrías recogerla con esto:
$DsAmount = $parameters["Ds_Amount"];
Edito: Si el precio es 34€ cuando recibes el array $parameters[] viene expresado como 'Ds_Amount' => '3400'
Muchas gracias !!
@palote2015 No hay ninguna manera de pasear el precio cuando lo recibo del array ? si hago un casting no tiene sentido por que la variable no son decimales lo devuelve entero, si hago un rtrim tampoco por que si introduce 1000 euros solo coge 1 y no se me ocurre nada.. gracias de antemano
Hola @DaniJmurcia , efectivamente te devuelve un entero, pero lo que puedes hacer es dividirlo entre 100 Si vez esta parte de código:
$amount = intval(strval($amount * 100));
Dicho valor se pasa a entero, creo que con dividirlo, obtienes el valor inicial.
Buenas, he integrado con tu librería la pasarela de pago y va todo bien, el problema viene cuando intento hacer la comprobación del pago, en mi api rest tengo:
try{ $key = config('redsys.key'); $parameters = Redsys::getMerchantParameters($request->input('Ds_MerchantParameters')); $DsResponse = $parameters["Ds_Response"]; $DsResponse += 0; if ($redsys->check($key, $_POST) && $DsResponse <= 99) { $user = new User(); $user->password = '1234'; $user->email = 'asd@asd.com'; $user->rol_id = '1'; $user->save(); $user->success = true; $user->msg = 'Usuario insertado correctamente'; } else { $user = new User(); $user->password = '1234'; $user->email = 'asd@asd.com'; $user->rol_id = '1'; $user->save(); $user->success = true; $user->msg = 'Usuario insertado correctamente'; } } catch (\Exception $e) { echo $e->getMessage(); }
y lo pongo en : $redsys->setNotification('http://127.0.0.1:8000/api/payment/comprobar'); //Url de notificacion La ruta de la api es tengo esas dos por si acaso: Route::get('comprobar', 'RedsysController@comprobar'); Route::post('comprobar', 'RedsysController@comprobar');
y cuando cancelo un pago no me genera el usuario en la db, alguna idea de por que puede ser ?