Casuística concreta KO en módulo Redsys  

 
Dolors
 Dolors
Usuario activo

Hola,
estoy rematando la fase de pruebas con la tienda y estoy con los pagos trabajando con la versión Prestashop 1.6.18 y con el módulo Redsys que facilitáis (redsys_prestashop_2.8.2_WE).
Hechas las pruebas con un cliente 'normal' a quien se le cobra el IVA me funciona el módulo Redsys, Paypal y transferencia perfectamente: importes cuadran, retornos, vacía el carrito, generación de correo, todo bien.
En mi tienda tenemos clientes intracomunitarios y he optado por comprar un módulo para los clientes exemptos de IVA. Le he echado un vistazo al software y lo único que hace es definir para los grupos de clientes definidos un campo que indica si están exemptos o no de IVA y sobreescribe la classe TaxCalculator para devolver una cosa u otra según el grupo al que pertenezca.
El módulo funciona perfectamente para el online, genera correctamente el carrito sin IVA y para los métodos de pago envía a las pasarelas el importe sin IVA ... por tanto a priori el nuevo módulo parece que no rompe nada.
Para Paypal y transferencias genera el detalle en el BackOffice de los productos bien sin IVA (muestra con y sin impuestos con el mismo valor) y envía los correos sin IVA, pero con el módulo de Redsys tengo un problema porque hace lo siguiente:
-Muestra la pasarela con el importe sin IVA - OK
-Realiza el cargo en la tarjeta sin IVA - OK
-Devuelve error de pago en el correo generado por Mail Alerts con el siguiente mensaje "errores:0Advertencia: la clave de seguridad está vacía, revise su cuenta de pago antes de la validación
da el mensaje
" (estoy pagando con la misma tarjeta en todas las pruebas, aquí pq se queja ¿?)
- Al consultar el detalle del pedido en el BackOffice en el detalle de los productos sale con el IVA (columnas producto sin impuestos y con impuestos distinto valor como si fuese un cliente normal) y la correspondiente suma con IVA (no comento nasa sobre el transporte porque está parametrizado sin impuestos, pero me temo que también saldría mal)
- El cliente recibe el mensaje de Error de Pago
- La tienda recibe el mensaje de nueva orden, pero el importe es incorrecto porque sale el desglose de los productos con IVA y la suma la hace con este importe

Entiendo que todo el problema lo tengo a la vuelta de Redsys, pero no entiendo como a la ida funciona sin problemas y a la vuelta tiene problemas. A qué clave de seguridad se refiere si estoy utilizando la misma tarjeta de crédito en ambos casos? Al módulo de Redsys en algún momento se le pasa algo relativo al IVA? A la vuelta vuelve a recalcular el importe y no se fia de lo que muestra en la pasarela? En que momento se genera el detalle del pedido en la PS_ORDER_DETAILS porque entiendo que allí radica el problema y el resto se arrastra (detalle pedido en el backoffice y correo).

[Actualizado] He activado el log del módulo de Redsys e indica que "El importe total no coincide". En algún sitio no se está enterando del grupo del cliente y no lo calcula correctamente, pero dónde si en la ida la hace bien???

No tengo ni idea de por donde meterme y como el módulo de Redsys lo habéis retocado del derecho y del revés a lo mejor sabéis cual es el problema porque yo ya no sé por donde mirar.

Un saludo y muchas gracias

Dolors

URL del sitio: Contenido solo visible a usuarios registrados

Citar
Respondido : 23/04/2018 8:39 pm
Jhon
 Jhon
Soporte CMS Webempresa Moderator

Hola

Al parecer es un problema con el cambio de precios, aquí hay una discusión similar:
https://www.prestashop.com/forums/topic/490074-error-redsys-el-importe-total-no-coincide/

Si desativas el módulo que has comprado para tus clientes intercomunitarios te sucede lo mismo?

Prueba la versión oficial del módulo:
http://www.redsys.es/

Saludos.

Si nuestra ayuda te sirve déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio
¡Gracias!.

ResponderCitar
Respondido : 23/04/2018 11:02 pm

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

Dolors
 Dolors
Usuario activo

Hola Jhon,

creo que ya he localizado el problema, en el componente Validation.php del módulo de Redsys hay esta sentencia $totalCart = $cart->getOrderTotal(true, Cart::BOTH); Con true de parámetro yendo a la classe Cart he visto que recupera el total del pedido con tasas, pasando de lo que le digas. Por eso cuando hace la comparación del importe que se envía a la plataforma que se me muestra bien sin IVA con éste que tiene el IVA no le cuadran los importes y no supera la validación.

Por eso pensaba que podía recuperar el $customer->id_default_group del cliente que lo tengo bien en la tabla ps_costumer y si vale 4 que es el intracomunitario hacer la llamada con false, pero como soy una negada con el PHP ni a tiros. A ver si me puedes echar un cable porque esto para ti tiene que ser pan comido. No sé si será suficiente, pero esto tiene pinta de estar mal si quieres llamarlo sin impuestos.

Validation.php

/** Validamos Objeto carrito **/
if ($cart->id_customer == 0
|| $cart->id_address_delivery == 0
|| $cart->id_address_invoice == 0
|| !$redsys->active) {
Tools::redirect('index.php?controller=order&step=1');
}
/** Validamos Objeto cliente **/
$customer = new Customer((int)$cart->id_customer);
if (!Validate::isLoadedObject($customer)) {
Tools::redirect('index.php?controller=order&step=1');
}

/** VALIDACIONES DE DATOS y LIBRERIA **/
//Total
$totalCart = $cart->getOrderTotal(true, Cart::BOTH);
$totalOrig = number_format($totalCart, 2, '', '');
// ID Moneda interno
$currencyOrig = new Currency($cart->id_currency);
// ISO Moneda
$monedaOrig = $currencyOrig->iso_code_num;
// DsResponse
$respuesta = (int)$respuesta;

if ($monedaOrig == $moneda && $totalOrig == $total && (int)$codigoOrig == (int)$codigo && $respuesta validateOrder($pedido, _PS_OS_PAYMENT_, $totalCart, $redsys->displayName, null, $mailvars, (int)$cart->id_currency, false, $customer->secure_key);
escribirLog($idLog." -- "."El pedido con ID de carrito " . $pedido . " es válido y se ha registrado correctamente.",$logActivo);
} else {
if (!($monedaOrig == $moneda)) {
escribirLog($idLog." -- "."La moneda no coincide.",$logActivo);
}
if (!($totalOrig == $total)) {
escribirLog($idLog." -- "."El importe total no coincide.",$logActivo);

Muchas gracias

ResponderCitar
Respondido : 23/04/2018 11:18 pm
Dolors
 Dolors
Usuario activo

Hola,

doy el tema por cerrado y solventado.
He bajado la última versión del módulo de Redsys y 'casualmente' esa validación la han eliminado.

Saludos y gracias

Dolors

ResponderCitar
Respondido : 23/04/2018 11:54 pm

wpdoctor-revisa-la-salud-de-tu-wordpress

Jhon
 Jhon
Soporte CMS Webempresa Moderator

Hola

Gracias por el aporte.

Saludos.

Si nuestra ayuda te sirve déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio
¡Gracias!.

ResponderCitar
Respondido : 23/04/2018 11:59 pm

Por favor Iniciar Sesión o Registro