Closed ChicoDeLosGatos closed 2 years ago
Que versión estas usando de la librería?
Estoy usando el paquete de ssheduardo/redsys-laravel: ~1.4.0
Que raro la verdad que te diga que no existe el método. De todas formas mira que tienes que enviar al entorno test de Rest.
$redsys->setEnvironment('restTest'); //Rest entorno test
Igualmente mira este issue de esta otra persona que le salta un error pero por parte del banco y también esta realizando un pago recurrente por REST.
Que raro la verdad que te diga que no existe el método. De todas formas mira que tienes que enviar al entorno test de Rest.
$redsys->setEnvironment('restTest'); //Rest entorno test
He vuelto a poner restTest
y me salta este mensaje
Add test or live
Aquí tienes el código
$key = 'sq7HjrUOBfKmC576ILgskD5srU870gJ7';
$redsys = new Tpv();
$redsys->setAmount($amount);
$redsys->setOrder(time());
$redsys->setMerchantcode($merchantcode); //Reemplazar por el código que proporciona el banco
$redsys->setCurrency('978');
$redsys->setTransactiontype('0');
$redsys->setTerminal('1');
$redsys->setIdentifier($subscription->payment_platform_code);
$redsys->setVersion('HMAC_SHA256_V1');
$redsys->setEnvironment('restTest'); //Rest entorno test
$redsys->setMerchantCofIni(false);
$redsys->setMerchantCofTxnid($data->ds_merchant_cof_txnid);
$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.
dd($parameters);
} else {
//acciones a realizar si ha sido erroneo
}
Probé a realizarlo "a mano" reproducidendo lo que veía que hacía la función de send
en el código, al principio me salía el mismo error que le salía al del problema #81, por lo que les escribí al banco y me dijeron esto:
En primer lugar, aclararle que es necesario que se envíen 2 peticiones. Una primera petición vía REST solicitando la operación y luego una segunda petición para gestionarla, en este caso la trataPeticion.
El error que están presentando se debe a que están intentando realizar la operación de trataPetición sin enviar la primera y es por ello que la misma no se puede completar.
Estuve intentando realizar esto pero me da muchos problemas porque cuando llego al formulario para la segunda operación me dice que la clave está mal, por lo que he vuelto a la primera opción que era usar este paquete porque para realizar los pagos normales con la pasarela me va bien, el problema lo tengo con los de rest.
Que raro la verdad que te diga que no existe el método. De todas formas mira que tienes que enviar al entorno test de Rest.
$redsys->setEnvironment('restTest'); //Rest entorno test
He vuelto a poner
restTest
y me salta este mensajeAdd test or live
Aquí tienes el código
$key = 'sq7HjrUOBfKmC576ILgskD5srU870gJ7'; $redsys = new Tpv(); $redsys->setAmount($amount); $redsys->setOrder(time()); $redsys->setMerchantcode($merchantcode); //Reemplazar por el código que proporciona el banco $redsys->setCurrency('978'); $redsys->setTransactiontype('0'); $redsys->setTerminal('1'); $redsys->setIdentifier($subscription->payment_platform_code); $redsys->setVersion('HMAC_SHA256_V1'); $redsys->setEnvironment('restTest'); //Rest entorno test $redsys->setMerchantCofIni(false); $redsys->setMerchantCofTxnid($data->ds_merchant_cof_txnid); $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. dd($parameters); } else { //acciones a realizar si ha sido erroneo }
Edito, tras realizar un composer update
ya me deja realizar el send()
y ya no me sale el mensaje de add test or live
.
Tras eso, me encuentro en el mismo caso que aquí
Probé a realizarlo "a mano" reproducidendo lo que veía que hacía la función de
send
en el código, al principio me salía el mismo error que le salía al del problema #81, por lo que les escribí al banco y me dijeron esto:En primer lugar, aclararle que es necesario que se envíen 2 peticiones. Una primera petición vía REST solicitando la operación y luego una segunda petición para gestionarla, en este caso la trataPeticion. El error que están presentando se debe a que están intentando realizar la operación de trataPetición sin enviar la primera y es por ello que la misma no se puede completar.
Estuve intentando realizar esto pero me da muchos problemas porque cuando llego al formulario para la segunda operación me dice que la clave está mal, por lo que he vuelto a la primera opción que era usar este paquete porque para realizar los pagos normales con la pasarela me va bien, el problema lo tengo con los de rest.
ya que me sale el mensaje SIS0218
y, después de haber hablado con los del banco sé que es porque se tiene que hacer en dos pasos, existe algun procedimiento anterior que haya que hacer antes de lanzar el código que te he citado? (Teninendo en cuenta, que antes el cliente ya habia pagado la primera vez y yo ya habia recogido el token de su tarjeta y su CofTxnid)
Ya he visto el error, esta en el ejemplo de la documentación. Voy a actualizarlo.
En el ejemplo que has puesto cambia y agrega esto:
Cambia
$redsys->setMerchantCofIni('N');
Y agrega
$redsys->setMerchantDirectPayment(true);
Al ejecutarlo ya devuelve:
Array
(
[Ds_Amount] => 7500
[Ds_Currency] => 978
[Ds_Order] => 1646648966
[Ds_MerchantCode] => xxxxxx
[Ds_Terminal] => 1
[Ds_Response] => 0000
[Ds_AuthorisationCode] => 504411
[Ds_TransactionType] => 0
[Ds_SecurePayment] => 0
[Ds_Language] => 1
[Ds_Merchant_Identifier] => xxxxxxxxxxxxxxxxxxx
[Ds_MerchantData] =>
[Ds_Card_Country] => 724
[Ds_Card_Brand] => 1
[Ds_Merchant_Cof_Txnid] => xxxxxxxxx
[Ds_ProcessedPayMethod] => 3
[Ds_Control_1646648950200] => 1646648950200
)
Ya me dices si te ha funcionado.
Perfecto, ahora sí que me funciona, era eso! Muchas gracias!
Genial.
Eso sí, en el entorno live
funcionará igual de bien no? No hay que ponerle restLive
?
Se debe poner restLive dado que lo estas enviando por Rest.
Vale perfecto, gracias por la ayuda! :)
Mismo problema pero siempre devuelve error 0195 Requiere autenticación SCA
Buenas, estoy intentando realizar un cobro por suscripción.
Sigo las instrucciones de la documentación, aquí mi código:
El caso es que cuando ejecuto la función
send()
me salta un error que diceCall to undefined method Sermepa\Tpv\Tpv::send()
.He probado con otras funciones como la de
createForm()
y en esas no hay ningún error, pero yo necesito usar la desend()
ya que quiero hacerlo por webservice sin interacción del usuario para cobrar las mensualidades automáticamente.Por qué puede estar pasando?
Gracias de antemano :)