Jump to content

Pasarela de pago Redsys Prestashop 1.7


Martin Fusalario

Recommended Posts

Buenas tardes,

 

¿Os funciona bien el módulo con Prestashop 1.7.2? Llevo todo el día investigando y hasta donde he podido llegar es al validate.php. El punto en el que falla es este:

$totalCart = $cart->getOrderTotal(true, Cart::BOTH);

La ejecución no pasa de ahí, así que no termina validando el pedido. He imprimido el objeto $cart y a parte de algunos ids que sí están rellenados, no hay datos de artículos, precios, totales, etc. Seguramente por eso peta el getOrderTotal. ¿Os ha pasado a alguno?

 

¡Gracias!

 

Buenos días,

 

En primer lugar agradecer la aportación de eltitoxusmi ya que somos muchos los que nos estamos encontrando con el problema de redsys y el tiempo que él ha dedicado a retocar este módulo es para quitarse el sombrero.

 

Yo estoy teniendo un problema similar con la 1.7.2 instalada ya que me realiza el pago de forma correcta pero no me genera el pedido. He puesto trazas en el validation pero se ve que falla justo en la línea siguiente:

$customer = new Customer((int)$cart->id_customer); 

He puesto trazas para comprobar que el $cart contiene el id_customer correcto y así es por lo que debe ser algún error a la hora de instanciar el nuevo objeto "Customer". He comprobado eque los permisos del fichero "validation.php" estén a 755 y así es. ¿Alguien tiene alguna idea?

 

Muchas gracias de antemano.

Link to comment
Share on other sites

Buenas!

 

    Generalmente cuando no se generan los pedidos correctamente suele ser un problema con los certificados SSL.

 

 

 

Redsys no acepta certificados SNI (certificados SSL sin IP fija) ya que requieren la validación del certificado por dominio y por IP. Esto hace que el sistema de notificaciones, que se encarga de actualizar el estado del pedido y, en algunos casos, de almacenar el propio pedido, no funcione correctamente.

 

En la web donde monté el módulo no la he actualizado todavía a 1.7.2, un poco de miedo a que se me desconfiguren todos los módulos como me pasó cuando actualicé la última vez. Probaré de todas formas este finde con un 1.7.2 y os informo

Link to comment
Share on other sites

Buenas!

 

    Generalmente cuando no se generan los pedidos correctamente suele ser un problema con los certificados SSL.

 

 

En la web donde monté el módulo no la he actualizado todavía a 1.7.2, un poco de miedo a que se me desconfiguren todos los módulos como me pasó cuando actualicé la última vez. Probaré de todas formas este finde con un 1.7.2 y os informo

.

¡Gracias Crack!

Link to comment
Share on other sites

Pero qué pasa cuando la versión de mi Prestashop es 1.6.1.11? Serviría esta versión de la que hablas? 

Buenas!

 

    Generalmente cuando no se generan los pedidos correctamente suele ser un problema con los certificados SSL.

 

 

En la web donde monté el módulo no la he actualizado todavía a 1.7.2, un poco de miedo a que se me desconfiguren todos los módulos como me pasó cuando actualicé la última vez. Probaré de todas formas este finde con un 1.7.2 y os informo

Link to comment
Share on other sites

 

Pero qué pasa cuando la versión de mi Prestashop es 1.6.1.11? Serviría esta versión de la que hablas?

 

Usa el módulo oficial de Redsys que puedes encontrar en su página, que soporta PS 1.6. esta modificación que he hecho está pensada a partir de la 1.7

Link to comment
Share on other sites

Pero el problema que tengo es el del Error del HandShake. Tengo Hosting Compartido y Certificado SSL comprado de Comodo pero el registro del pedido no se proceso y en las notificaciones recibo error del HandShake.

 

 

Usa el módulo oficial de Redsys que puedes encontrar en su página, que soporta PS 1.6. esta modificación que he hecho está pensada a partir de la 1.7

Link to comment
Share on other sites

Pero el problema que tengo es el del Error del HandShake. Tengo Hosting Compartido y Certificado SSL comprado de Comodo pero el registro del pedido no se proceso y en las notificaciones recibo error del HandShake.

 

Este es el hilo para 1.7. Para el oficial genérico de Redsys te recomiendo que sigas el hilo https://www.prestashop.com/forums/topic/266480-modulo-redsys-tpv-virtual-gratis-en-su-web/

 

En tu caso concreto tiene pinta que el cipher del certificado SSL no está soportado por Redsys seguramente, hablando desde el desconocimiento concreto de tu proyecto.

 

 

Como le hemos indicado anteriormente esto puede ser producido a que debe admitir alguno de los siguientes Cipher Suites, que en su caso, salvo error, no admite ninguno de ellos:

 

SSL_RSA_WITH_RC4_128_MD5,

SSL_RSA_WITH_RC4_128_SHA,

SSL_RSA_WITH_AES_128_CBC_SHA,

SSL_RSA_WITH_AES_256_CBC_SHA,

SSL_RSA_WITH_3DES_EDE_CBC_SHA,

SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA

Link to comment
Share on other sites

Buenas! soy bastante nueva en todo esto, así que perdonad si la pregunta suena tonta :)

 

¿El tema de la IP fija es algo que cualquier hosting debe poder solucionar, o está sujeto al plan de pago que uno tiene contratado con ellos? Ya tengo el SSL (después de muchas dificultades para que me lo instalasen correctamente), y ahora descubro que también necesito la ip fija!

 

En todo caso, la respuesta de mi hosting a mi petición de IP fija para Redsys es esta:

 

'Te confirmo que nuestra plataforma de Hosting Linux responde bajo tecnología SNI la cual te pedirá Redsys que confirmes que dispones. Según la nueva actualización que realizaron en su módulo, podrás instalártelo sin problemas e implementarlo en tu espacio web. Meses atrás Redsys, solicitaba para sus módulos una única IP, por lo que debías pasar la gestión de tu tienda online hacia un servidor dedicado con una única IP. Desde Julio de este año, implementaron la tecnología SNI y ahora ya no es necesario de requerir una única IP, puesto que su módulo acepta tecnología SNI.

En caso de que tengas dudas, contacta con ellos directamente para que te indiquen los requisitos que debe tener tu Hosting, pero en principio, como te comentaba, nuestra plataforma es apta para este tipo de implementación.'

 

 

¿Hay algún otro requisito técnico para que el módulo gratuito de redsys funcione corretamente en 1.7.1?

 

Gracias!

Edited by naturalba (see edit history)
Link to comment
Share on other sites

Hola a tod@s,

Tras encontrar este hilo en el foro e instalado la aportación /modulo de eltitoxusmi me funciono Redsys en pretashop 1.7.1.2. Pero al tener que actualizar a la 1.7.2.0 por recomendación del creador de la plantilla que me generaba problemas, también me encuentro que no me genera el pedido / no vacía el carro de la compra, pero si hace el pago en TPV virtual. No puedo probar en modo depuración para intentar encontrar el error, ya que en modo depuración no se muestra el modulo en la compra, he probado con los permisos, el certificado ssl (aunque gratuito) esta con IP fija y otros, pero sigue sin funcionar. Los de Redsys, dicen que por sus parte no muestra errores en el pago.

¿Ha alguien le funciona en 1.7.2.0?, ¿alguna idea de que puede ser?

Gracias.

Link to comment
Share on other sites

Yo tengo el mismo problema con la versión de prestshop 1.7.2, pero si has seguido el foro verás que eltitoxusmi, que es el compañero forero que se ha currado la actualización del módulo redsys 3.0 al prestashop 1.7, iba a echar un vistazo al problema en estos días, para ver si le funcionaba correctamente en la versión última 1.7.2

Link to comment
Share on other sites

Hola a todo@s,

 

Soy nuevo en este foro pero quería aportar mi granito de arena.

 

Yo también tengo el Prestashop 1.7.2 con el último modulo de RedSys 3.0 bajado de su web, y una vez realizado el pago ni me vaciaba el carrito,ni me ponía el resumen del pago con la compra y no me redirigía correctamente.

 

Le he echado un vistazo al validation.php, y aunque no me he querido meter en profundidad, he visto que no obtiene bien el objeto $cart ni el $totalCart (que supuestamente es el importe total de la compra en la tienda. No confundir con el $total o el $totalOrig que es el total, el Ds_Amount que nos viene de RedSys).

 

He modificado para mi tienda también el redsys.php para que en el carro de la compra me cambie la imagen de RedSys (que los clientes no creo que conozcan) por los iconos de visa y mastercard.

 

Con todos estos cambios ya me funciona correctamente la pasarela de pago con Redsys.

 

Os dejo un enlace donde os podréis bajar los dos archivos y reemplazarlos en vuestra tienda para la 1.7.2

 

https://drive.google.com/open?id=0B8Dt0Ja2K-bxU1k4M20zeWpULVk

 

Los que tenéis que reemplazar son estos:

 

../modules/redsys/redsys.php

../modules/redsys/validation.php

 

Cualquier cosa me decís pepebotella y josemadominguez.

 

Espero haberos ayudado!

 

Saludos  ;)

  • Like 1
Link to comment
Share on other sites

Hola ComaFlotante,

 

Gracias por tú aportación, he probado sustituyendo los archivos que adjuntas, pero ha mi no me ha funcionado. Hace el Pago en TPV virtual, pero no continua con el pedido en prestashop (sigue el producto en el carrito). Incluso he cambiado los permisos de los ficheros de 644 a 666.

Buena idea el cambiar el icono de Redsys por las tarjetas.

Gracias a tod@s por seguir aportando.

Link to comment
Share on other sites

Hola a todo@s,

 

Soy nuevo en este foro pero quería aportar mi granito de arena.

 

Yo también tengo el Prestashop 1.7.2 con el último modulo de RedSys 3.0 bajado de su web, y una vez realizado el pago ni me vaciaba el carrito,ni me ponía el resumen del pago con la compra y no me redirigía correctamente.

 

Le he echado un vistazo al validation.php, y aunque no me he querido meter en profundidad, he visto que no obtiene bien el objeto $cart ni el $totalCart (que supuestamente es el importe total de la compra en la tienda. No confundir con el $total o el $totalOrig que es el total, el Ds_Amount que nos viene de RedSys).

 

He modificado para mi tienda también el redsys.php para que en el carro de la compra me cambie la imagen de RedSys (que los clientes no creo que conozcan) por los iconos de visa y mastercard.

 

Con todos estos cambios ya me funciona correctamente la pasarela de pago con Redsys.

 

Os dejo un enlace donde os podréis bajar los dos archivos y reemplazarlos en vuestra tienda para la 1.7.2

 

https://drive.google.com/open?id=0B8Dt0Ja2K-bxU1k4M20zeWpULVk

 

Los que tenéis que reemplazar son estos:

 

../modules/redsys/redsys.php

../modules/redsys/validation.php

 

Cualquier cosa me decís pepebotella y josemadominguez.

 

Espero haberos ayudado!

 

Saludos  ;)

 

Cuidado porque te has cepillado toda la validación del objeto cliente y eso puede ser un problema si tienes tienda multilenguaje/multidivisa. Fíjate en dos de las líneas que has comentado

//Context::getContext()->language = new Language((int)$cart->id_lang);
//Context::getContext()->currency = new Currency((int)$cart->id_currency);	

Al cargarte eso, realmente no sé qué puede pasar en una tienda con dos idiomas, por ejemplo, al no meterle en el contexto el idioma del "carrito". Por lo que aporta el compañero @ComaFlotante , el error parece que está en el objeto $cart, que por algún motivo no estará guardando algún dato correctamente cuando genera el carrito (seguramente habrá cambiado algo en 1.7.2?) y de ahí que al recuperarlo tampoco lo haga correctamente. 

 

A ver si saco un rato y lo miro

Link to comment
Share on other sites

Hola a todo@s,

 

Soy nuevo en este foro pero quería aportar mi granito de arena.

 

Yo también tengo el Prestashop 1.7.2 con el último modulo de RedSys 3.0 bajado de su web, y una vez realizado el pago ni me vaciaba el carrito,ni me ponía el resumen del pago con la compra y no me redirigía correctamente.

 

Le he echado un vistazo al validation.php, y aunque no me he querido meter en profundidad, he visto que no obtiene bien el objeto $cart ni el $totalCart (que supuestamente es el importe total de la compra en la tienda. No confundir con el $total o el $totalOrig que es el total, el Ds_Amount que nos viene de RedSys).

 

He modificado para mi tienda también el redsys.php para que en el carro de la compra me cambie la imagen de RedSys (que los clientes no creo que conozcan) por los iconos de visa y mastercard.

 

Con todos estos cambios ya me funciona correctamente la pasarela de pago con Redsys.

 

Os dejo un enlace donde os podréis bajar los dos archivos y reemplazarlos en vuestra tienda para la 1.7.2

 

https://drive.google.com/open?id=0B8Dt0Ja2K-bxU1k4M20zeWpULVk

 

Los que tenéis que reemplazar son estos:

 

../modules/redsys/redsys.php

../modules/redsys/validation.php

 

Cualquier cosa me decís pepebotella y josemadominguez.

 

Espero haberos ayudado!

 

Saludos  ;)

 

Ante todo muchas gracias por la aportación. En un principio me fallaba porque al validar los importes no eran iguales (uno de ellos tenía dos "0" al final.). He modificado la comprobación para que compruebe el mismo numero dividido entre 100 y esa parte ya la hace pero cuando llama a la función "validateOrder" falla. Seguiré investigando...
 
Gracias de nuevo!
Link to comment
Share on other sites

Una pregunta: me han mandado los de redsys a través de mi banco los parámetros para configurar el entorno de pruebas (los definitivos aún no), y cuando los meto en el módulo y quiero hacer una prueba de compra recibo el mensaje 'no hay ningún método de pago'. Ni siquiera me aparece la opción de pago por transferencia. Cuando desactivo el módulo redsys vuelve la opción de la transferencia. Tengo 1.7.1 y el módulo modificado que se subió aquí.

 

Algún pista de que puede estar pasando?

 

Gracias

Link to comment
Share on other sites

Me parece que no he subido el validationcorrecto. Tenía varios, y he subido uno con el que estaba "jugando"

 

Eltutoxusmi, a mi me da error en algún atributo que se carga o debería cargar en el $cart, pero no tengo mucho tiempo para averiguar cuál es. Si tienes un rato para investigarlo, genial, más que nada para no quedarme con la curiosidad  ;)

 

Josemadominguez, he subido el validate correcto. Me funciona bien el pago, el return, el idioma y las divisas (Ya que mi tienda está en inglés y español). Por si acaso, aunque no creo que te afecte, quita la caché de tu tienda, fuerza la recompilación de tu tienda para hacer las pruebas y limpia la caché de tu explorador.

 

Te dejo ahí el enlace para que te lo descargues:

 

https://drive.google.com/open?id=0B8Dt0Ja2K-bxZkVSV25uWjZwMTg

 

Naturalba, es la 3.0.0 de RedSys?

Link to comment
Share on other sites

Sí, la 3.0.0, pero la versión modificada que subieron por aquí. También he añadido tus dos archivos y seguía sin funcionar, aunque no he probado con el nuevo que acabas de subir. Y, claro, los de redsys al preguntarle versión de prestashop y del módulo han terminado su soporte, porque ese módulo no es compatible de entrada. Les he dicho que a vosotros os funciona con alguna modificación, pero eso no es asunto suyo. Y no quisiera comprar el módulo de pago hasta no estar por lo menos segura de que el sistema me convence (además de que si se puede prefiero el gratuito, claro).

 

Alguna idea? Mando capturas o algo?

Link to comment
Share on other sites

Me parece que no he subido el validationcorrecto. Tenía varios, y he subido uno con el que estaba "jugando"

 

Eltutoxusmi, a mi me da error en algún atributo que se carga o debería cargar en el $cart, pero no tengo mucho tiempo para averiguar cuál es. Si tienes un rato para investigarlo, genial, más que nada para no quedarme con la curiosidad  ;)

 

Josemadominguez, he subido el validate correcto. Me funciona bien el pago, el return, el idioma y las divisas (Ya que mi tienda está en inglés y español). Por si acaso, aunque no creo que te afecte, quita la caché de tu tienda, fuerza la recompilación de tu tienda para hacer las pruebas y limpia la caché de tu explorador.

 

Te dejo ahí el enlace para que te lo descargues:

 

https://drive.google.com/open?id=0B8Dt0Ja2K-bxZkVSV25uWjZwMTg

 

Naturalba, es la 3.0.0 de RedSys?

 

¡¡Funciona perfecto!!

 

Mil gracias!!!! :-)

  • Like 2
Link to comment
Share on other sites

Si, lo pongo en test, concretamente en la primera opción sis-t. La captura no te puedo poner en este mismo momento porque no tengo el ordenador delante y desde el móvil no me deja acceder a los módulos. El resto de cosas que pongo es el número de Comercio, contraseña de encriptacion, Número de terminal 1 y cero en la otra opción,que no recuerdo, más que nada por dejarlo como está ya que no me han dicho que ahí deba poner nada...

Link to comment
Share on other sites

Normalmente si tienes un CPanel te muestra los permisos a la derecha de los fichero desde su explorador.

 

En un FTP también suele mostrar los archivos y es aquí donde yo los cambio porque te lo hace recursivamente desde el directorio que tu selecciones.

 

Aquí te dejo un screenshot:

 

https://drive.google.com/open?id=0B8Dt0Ja2K-bxWmpkbThVRTVDZG8

Link to comment
Share on other sites

También he estado buscando por google y aparecen un par de conversaciones sobre el modulo redsys en las que alguien comenta que tiene el mismo error (eso de Desafortunadamente, no hay métodos de pago disponibles), pero no se ha puesto ninguna solución...

Link to comment
Share on other sites

Hola a todos.

 

Antes que nada felicitar a todos lo que hacen posible que gente con poca experiencia como yo podamos resolver problemas de programación de este tipo. Una pregunta, al descargarme los archivos nuevos de redsys. Cómo los instalo? simplemente borro (o renombro) la partela de redsys y copio esta nueva? o hay que hacer algún tipo de instalación de módulo...

 

Gracias a todos por vuestras prontas respuestas.

Un cordial Saludo

Link to comment
Share on other sites

También he estado buscando por google y aparecen un par de conversaciones sobre el modulo redsys en las que alguien comenta que tiene el mismo error (eso de Desafortunadamente, no hay métodos de pago disponibles), pero no se ha puesto ninguna solución...

 

Yo lo que haría es desinstalar el módulo de redsys, ver que realmente se ha desinstalado del servidor (comprobar que la carpeta ya no existe dentro del directorio de modulos) y volver a instalarlo. Cambiar todos los permisos dentro de la carpeta y hacer una prueba de compra. Prueba a ver si así te salen los módulos de pago

  • Like 1
Link to comment
Share on other sites

Hola a todos.

 

Antes que nada felicitar a todos lo que hacen posible que gente con poca experiencia como yo podamos resolver problemas de programación de este tipo. Una pregunta, al descargarme los archivos nuevos de redsys. Cómo los instalo? simplemente borro (o renombro) la partela de redsys y copio esta nueva? o hay que hacer algún tipo de instalación de módulo...

 

Gracias a todos por vuestras prontas respuestas.

Un cordial Saludo

 

 

Si ya tienes instalado el módulo de redsys instalado, solo tienes que sustituirlos por lo que te has bajado.

Link to comment
Share on other sites

Yo lo que haría es desinstalar el módulo de redsys, ver que realmente se ha desinstalado del servidor (comprobar que la carpeta ya no existe dentro del directorio de modulos) y volver a instalarlo. Cambiar todos los permisos dentro de la carpeta y hacer una prueba de compra. Prueba a ver si así te salen los módulos de pago

Hecho, y sigue dando el mismo error. Una pregunta: ¿Sustituir los dos archivos que tú has modificado en el zip de descarga de la web de redsys sería suficiente, o la modificación que se colgó en este foro incluye más cambios?

 

Estoy pensando también cambiar mi tienda a prestashop 1.6 y utilizar el módulo redsys tal cual está en su web, porque como acabo de contratar el servicio imagino que me darían servicio técnico al ser una versión compatible, aunque no sé si los 250 artículos que ya tengo soportarían ese retroceso (no sé si la copia de la base de datos de MySQL creada con 1.7 se leerá completa en esa versión). Ahora mismo no me dan soporte por tener la tienda en 1.7.

 

Si se te ocurre otra solución...

Link to comment
Share on other sites

Hola de nuevo,

 

He implementado el módulo y se puede hacer la compra en entorno test, llega correctamente al banco; pero no genera el pedido en el historial.

He actualizdo el archivo valdation.php que mencionaron anteriormente. No funciona la validación.

 

¿Podéis ayudarme al respecto?

 

Gracias

Edited by ecoloco2 (see edit history)
Link to comment
Share on other sites

Buenos dias, 

 

En primer lugar felicitaciones a todos por el módulo y por todas la aportaciones. Hemos seguido todo el hilo y nos esta funcionando todo a excepción de que una vez realizado el pago y Redsys confirma que el pago se ha efectuado correctamente, el pedido no queda guardado en el historial como pagado. Hemos activado las trazas del log y nos aparece las siguientes líneas:

 

Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- totalPost: 6500
Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- Total (15582405): 6500
Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- La moneda no coincide. ( : 978)
Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- Ds_AuthorisationCode inválido. (++++++)
 
Alguien ha podido detectar y resolver este error? He cambiado los permisos de las carpetas tal y como indican, y el problema persiste.
 
Muchas gracias de antemano! :)
Link to comment
Share on other sites

 

Buenos dias, 

 

En primer lugar felicitaciones a todos por el módulo y por todas la aportaciones. Hemos seguido todo el hilo y nos esta funcionando todo a excepción de que una vez realizado el pago y Redsys confirma que el pago se ha efectuado correctamente, el pedido no queda guardado en el historial como pagado. Hemos activado las trazas del log y nos aparece las siguientes líneas:

 

Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- totalPost: 6500
Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- Total (15582405): 6500
Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- La moneda no coincide. ( : 978)
Aug 30 2017 12:42:14 -- hZgurxm7bsKY1Zo8ScAG -- Ds_AuthorisationCode inválido. (++++++)
 
Alguien ha podido detectar y resolver este error? He cambiado los permisos de las carpetas tal y como indican, y el problema persiste.
 
Muchas gracias de antemano! :)

 

 

El problema realmente era con la moneda. Hemos forzado todas las variables correspondientes a la moneda a 978, y ahora en las trazas de logs no aparece ningun error, la transacción bancaria se realiza (el pedido es cobrado) pero igualmente sigue si quedar como pagado en el historial de compras...

Link to comment
Share on other sites

El problema realmente era con la moneda. Hemos forzado todas las variables correspondientes a la moneda a 978, y ahora en las trazas de logs no aparece ningun error, la transacción bancaria se realiza (el pedido es cobrado) pero igualmente sigue si quedar como pagado en el historial de compras...

 

SOLUCIÓN AL PROBLEMA QUE EL PAGO SE REALIZA PERO EL PEDIDO NO QUEDA COMO PAGADO EN EL HISTORIAL DEL CLIENTE:

 

Siguiendo el hilo hay un punto que se indica que modificar la línia donde se genera el número de pedido dentro del archivo redsys.php para evitar error de pedido repetido:

 

$numpedido = str_pad($params['cart']->id, 8, "0", STR_PAD_LEFT) . date('is');

 

Ok, pues si se modifica esta línea, deberemos de modificar otra del validation.php.

 

En lugar de 

$pedido = intval(substr($pedidoSecuencial, 0, 11));

 

tendremos que poner

$pedido = intval(substr($pedidoSecuencial, 0, 8));

 

Esta modificación me ha solucionado el problema. Espero que os sirva de ayuda.

 

saludos!

Link to comment
Share on other sites

  • 2 weeks later...

Hola, tengo un problema con el módulo Redsys modificado por vosotros, me ha funcionado perfectamente en prestashop 1.7 pero al actualizar a la 1.7.2 cuando alguien hace un pedido y paga con tarjeta, el cobro se hace correctamente, pero el pedido no se genera, queda como carrito abandonado a pesar de que el cliente lo ha pagado...

He visto en el código fuente del módulo que hace referencia a un archivo llamado header.php que en mi prestashop no está... no se si tiene algo que ver...
 

include(dirname(__FILE__).'/../../header.php');
Link to comment
Share on other sites

:wub:  UPS! la madre de las chigadas amigos, siempre me gusto hacer conectores de pagos y modulos para Redsys.

 

he visto a la ligera el archivo y tiene demasiados problemas, vean lo que les comento en el codigo:

<?php
/**
* NOTA SOBRE LA LICENCIA DE USO DEL SOFTWARE
* 
* El uso de este software está sujeto a las Condiciones de uso de software que
* se incluyen en el paquete en el documento "Aviso Legal.pdf". También puede
* obtener una copia en la siguiente url:
* http://www.redsys.es/wps/portal/redsys/publica/areadeserviciosweb/descargaDeDocumentacionYEjecutables
* 
* Redsys es titular de todos los derechos de propiedad intelectual e industrial
* del software.
* 
* Quedan expresamente prohibidas la reproducción, la distribución y la
* comunicación pública, incluida su modalidad de puesta a disposición con fines
* distintos a los descritos en las Condiciones de uso.
* 
* Redsys se reserva la posibilidad de ejercer las acciones legales que le
* correspondan para hacer valer sus derechos frente a cualquier infracción de
* los derechos de propiedad intelectual y/o industrial.
* 
* Redsys Servicios de Procesamiento, S.L., CIF B85955367
*/

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/../../header.php');
include(dirname(__FILE__).'/redsys.php');

/* SE DEBE INVOLUCRAR A LA CLASS PRINCIPAL LOS OBJETOS DEBEN PROVENIR DE ALLI
 */
$module = new Redsys();

if(!function_exists("escribirLog")) {
	require_once('apiRedsys/redsysLibrary.php');
}
if(!class_exists("RedsysAPI")) {
	require_once('apiRedsys/apiRedsysFinal.php');
}

//Tools::displayFileAsDeprecated();

/* NO VA 
$accesoDesde = "";
if (!empty($_POST)) {
	$accesoDesde = 'POST';
} else if (!empty($_GET)) {
	$accesoDesde = 'GET';
}
*/
/* NO VA PRESTASHOP DETERMINA SI EL METODO ES POST OR GET !!
if ($accesoDesde === 'POST' || $accesoDesde === 'GET') { 
  */
if (Tools::isSubmit('Ds_SignatureVersion') || Tools::isSubmit('Ds_MerchantParameters') || Tools::isSubmit('Ds_Signature')) {
	/*
	 * HAY QUE VALIDAR SEGUN CORRESPONDA O FILTRAR CON TOOLS */
	/* QUE SE ESPERA RECIBIR */
	$version     = Tools::getValue('Ds_SignatureVersion');
	/* QUE SE ESPERA RECIBIR */
	$datos    = Tools::getValue('Ds_MerchantParameters');
	/* QUE SE ESPERA RECIBIR */
	$firma_remota    = Tools::getValue('Ds_Signature');

	// Se crea Objeto
	$miObj = new RedsysAPI;
	
	/*
	 NO SE PUDE SIN ANTES VALIDAR
	 */
	$decodec = $miObj->decodeMerchantParameters($datos);

	/** Clave **/
	$kc = Configuration::get('REDSYS_CLAVE256');
	
	/** Se calcula la firma **/
	$firma_local = $miObj->createMerchantSignatureNotif($kc,$datos);
	
	/** Extraer datos de la notificación **/
	$total     = $miObj->getParameter('Ds_Amount');
	$pedido    = $miObj->getParameter('Ds_Order');
	$codigo    = $miObj->getParameter('Ds_MerchantCode');
	$moneda    = $miObj->getParameter('Ds_Currency');
	$respuesta = $miObj->getParameter('Ds_Response');
	$id_trans = $miObj->getParameter('Ds_AuthorisationCode');
	
	/** Código de comercio **/
	$codigoOrig = Configuration::get('REDSYS_CODIGO');
	
	/** Pedidos Cancelados **/
	$error_pago = Configuration::get('REDSYS_ERROR_PAGO');
	
	/** Log de Errores **/
	$logActivo = Configuration::get('REDSYS_LOG');
	$idLog = generateIdLog();
	$pedidoSecuencial = $pedido;
	$pedido = intval(substr($pedidoSecuencial, 0, 11));
	/** VALIDACIONES DE LIBRERÍA **/
	if ($firma_local === $firma_remota
		&& checkImporte($total)
		&& checkPedidoNum($pedido)
		&& checkFuc($codigo)
		&& checkMoneda($moneda)
		&& checkRespuesta($respuesta)) {
		  /* ??????? 
		   * LA LOGICA IMPLICA QUE DEBE SUCEDER SI YA A SUCEDIDO ?? SIENDO QUE GET PUT POST ??
		   */
		if ($accesoDesde === 'POST') {

			/** Creamos los objetos para confirmar el pedido **/
			//$context = Context::getContext();
			$cart = new Cart($pedido);
			$redsys = new redsys();

			/** 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);
			
			/** Donet **/
			Context::getContext()->customer = $customer;
			$address = new Address((int)$cart->id_address_invoice);
			Context::getContext()->country = new Country((int)$address->id_country);
			Context::getContext()->customer = new Customer((int)$cart->id_customer);
			Context::getContext()->language = new Language((int)$cart->id_lang);
			Context::getContext()->currency = new Currency((int)$cart->id_currency);			
			
			//if (!Validate::isLoadedObject($customer)) {
			//	Tools::redirect('index.php?controller=order&step=1');
			//}
			
			/** VALIDACIONES DE DATOS y LIBRERÍA **/
			//Total
			/* TENER UN ARCHIVO CON PERMISO ESCRITURAS EN UN MODULO QUE PUEDE 
			 * RECIBIR PARAMETROS POST GET SIN VALIDAR NO ES CONVENIENTE
			 * LOS TEXTOS DEBEN PASAR POR EL TRADUCTOR DE ESTE MODO
			 * Y NO SE usar comillas dobles!
			 */
			$totalOrig = $total;
			/*
			 * escribirLog($idLog." -- "."totalPost: " . $totalOrig,$logActivo);
			escribirLog($idLog." -- "."Total (" . $pedido . "): ".$totalOrig,$logActivo);
			*/
			escribirLog($idLog.'--'.$module->l('totalPost: ').$totalOrig, $logActivo);
			escribirLog($idLog." -- ".$module->l('Total #').$pedido.':'.$totalOrig, $logActivo);

			// 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 < 101 && checkAutCode($id_trans)) {
				/** Compra válida **/
				$mailvars['transaction_id'] = (int)$id_trans;
				$redsys->validateOrder($pedido, _PS_OS_PAYMENT_, $totalOrig/100, $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. ($monedaOrig : $moneda)",$logActivo);
				}
				if (!($totalOrig == $total)) {
					escribirLog($idLog." -- "."El importe total no coincide. ($totalOrig : $total)",$logActivo);
				}
				if (!((int)$codigoOrig == (int)$codigo)) {
					escribirLog($idLog." -- "."El código de comercio no coincide. ($codigoOrig : $codigo)",$logActivo);
				}
				if (!checkAutCode($id_trans)){
					escribirLog($idLog." -- "."Ds_AuthorisationCode inválido. ($id_trans)",$logActivo);
				}
				if ($error_pago=="no"){
					/** se anota el pedido como no pagado **/
					$redsys->validateOrder($pedido, _PS_OS_ERROR_, 0, $redsys->displayName, 'errores:'.$respuesta);
				}
				escribirLog($idLog." -- "."El pedido con ID de carrito " . $pedido . " es inválido.",$logActivo);
			}
		} 
		/* ??????? QUE ES ESTO! */
		else if ($accesoDesde === 'GET') {
			$respuesta = (int)$respuesta;
			if ($respuesta < 101) {
				/* QUE JODER HOMBRE QUE SE LO QUE SEA TE LLEVA AL MISMO SITIO ?????
				 */
				Tools::redirect('index.php?controller=order&step=1');
			} else {
				Tools::redirect('index.php?controller=order&step=1');
			}
		}
	} else {
	/* NOOOO ES NEECESARIO MENOS EN ESTE PUNTO, LA VALIDACION DEBE SER ANTES DE CUALQUIER ACCION!!
	 */	
	  if ($accesoDesde === 'POST') {
			if (!($firma_local === $firma_remota)) {
				escribirLog($idLog." -- "."La firma no coincide.",$logActivo);
			}
			if (!checkImporte($total)){
				escribirLog($idLog." -- "."Ds_Amount inválido.",$logActivo);
			}
			if (!checkPedidoNum($pedido)){
				escribirLog($idLog." -- "."Ds_Order inválido.",$logActivo);
			}
			if (!checkFuc($codigo)){
				escribirLog($idLog." -- "."Ds_MerchantCode inválido.",$logActivo);
			}
			if (!checkMoneda($moneda)){
				escribirLog($idLog." -- "."Ds_Currency inválido.",$logActivo);
			}
			if (!checkRespuesta($respuesta)){
				escribirLog($idLog." -- "."Ds_Response inválido.",$logActivo);
			}
			if ($error_pago=="no"){
				/** se anota el pedido como no pagado **/
				$redsys->validateOrder($pedido, _PS_OS_ERROR_, 0, $redsys->displayName, 'errores:'.$respuesta);
			}
			escribirLog($idLog." -- "."Notificación: El pedido con ID de carrito " . $pedido . " es inválido.",$logActivo);
		} else if ($accesoDesde === 'GET') {
			Tools::redirect('index.php?controller=order&step=1');
		}
	}
}

SI ALGUIEN TIENE DOCUMENTACION OFICIAL O LINK OFICIALES donde obtener documentación puedo hacerles un modulo funcional el dia miercoles.

 

suban documentación. :rolleyes:

 

saludos

:)

  • Like 1
Link to comment
Share on other sites

Que tipo de documentación necesitas? aquí tienes las APIs y el módulo oficial para varias plataformas: 

 

http://www.redsys.es/#descargas

 

Hola que tal, lo que sucede es que no soy cliente y no tengo numero de comercio para descargar los manuales en:

 

https://www.redsys.es/manuales/index.jsp

 

En cuanto al modulo Prestashop de la descarga ya lo habia bajado, pero no sirve ya que es una perdida de tiempo andar adivinando lo que quería hacer el que lo desarrollo, es mucho mas rápido si tengo el manual.

A primera vista ni las API están dentro de los parámetros stares PSR-2 de desarrollo: 

 

http://www.php-fig.org/psr/psr-2/

 

Yo no gasto tiempo analizando archivos que no están programados dentro de un standar de programación, por que eso indica que el que lo hizo no tenia ni la mas  pálida idea de programación.  Pero se puede corregir si tengo el manual oficial para integración e-comerce.

 

LO QUE NECESITO ES ESO UN MANUAL, Y QUE ALGÚN CLIENTE SE PONGA EN CONTACTO CON EL SOPORTE TÉCNICO Y REMITA LA URL DE ESTE POST :

 

https://www.prestashop.com/forums/topic/582916-pasarela-de-pago-redsys-prestashop-17/page-8?do=findComment&comment=2609975

 

de este modo algún ingeniero o analista puede enterarse que se va a realizar un modulo FREE OPEN SOURCE.  que podrán distribuir libremente.

 

El modulo actual para Prestashop, no es seguro y el desarrollo no respecta los satandares de seguridad de Prestashop. Por ejemplo :

-no valida variables de retorno

-no da respuesta a nivel servidor

- hay archivos que deben ser propietario servidor (Owner permissions) como "config_es.xml" este archivo no debe existir en el modulo, Prestashop lo creará automáticamente.

 

En fin, hay demasiados problemas a solucionar, pero no es mi intención menoscabar el trabajo ajeno, si no ayudar.

Lo que no entiendo es ¿por qué Redsys no contrato un ingeniero? :(

 

Yo estoy con bastante trabajo, pero si consiguen los manuales, puedo hacer el modulo en cuanto me haga un tiempito, o el dia sabado.

 

saludos ^_^

Edited by tamu secreto (see edit history)
Link to comment
Share on other sites

En ese links que dices, lo que hay son manuales para los TPV físicos, para las tiendas físicas, no tiene nada que ver con la pasarela de pago online...

 

Estimado lea atentamente lo que he escrito, le repito necesito los manuales de integración e-commerce oficiales y actuales, lo que yo poseo son antiguos y la empresa se fusiono hace años y no sirven los que poseo.

De todos modos ya he contactado al departamento de ingeniería de la empresa, dudo que me envien los manuales sin ser cliente.

Si usted es cliente contacte al soporte técnico y pida los manuales de integración e-commerce formato PDF de la actual version del sys.

Link to comment
Share on other sites

Tengo el mismo problema que algún usuario por aquí.

El pedido se genera en redsys y se paga correctamente, pero no se genera en prestashop.

¿Hay alguna solución a esto que se me hay escapado?

Mil gracias

 

Primero aparentemente el archivo validation.php esta hacien de IPN, esto significa que ese archivo recibe la notificación de pago por background, esto quiere decir que la información no es visible para el usuario. En tal caso el archivo esta gestionando mal las llamadas de archivos:

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/../../header.php');
include(dirname(__FILE__).'/redsys.php')


la llamada header.php se debe hacer cuando se necesita el set media de prestashop, o sea los archivos css, js, etc.. para mostrar algun archivo tpl. En este caso si no se mostrar nada al cliente no es necesario, y puede que de error.

Pruebe cambiando eso en el archivo validation.php por esto:

require_once(dirname(__FILE__).'/../../config/config.inc.php');
require_once(dirname(__FILE__).'/../../init.php');
include_once(dirname(__FILE__).'/redsys.php');

luego en la linea 106, 120 hace una redireccion "Tools::redirect('index.php?controller=order&step=1');"   si el archivo es un IPN no debe hacer redirecciones.

 

en la practica hay una confucion con la url de notificacion y la url "DS_MERCHANT_URLOK"  y "DS_MERCHANT_URLKO"

 

Ds_Merchant_MerchantURL --> ES LA URL IPN NOTIFICACION DE PAGO INSTANTANEO (oculta al cliente).

 

Ds_Merchant_UrlOK --> es mayormente opcional en las TPV pero es recomendable usarla, es la url donde se debe regresar al cliente despues de hacer el pago.

 

Ds_Merchant_UrlKO --> es la url donde se regresa al cliente si el pago no se hizo correctamente o si surgio algun problema.

 

lo mas importante es la Ds_Merchant_MerchantURL IPN pues antes de que el cliente regrese ya prestashop va tener el resultado de la operación.

 

Lo que sucede en el archivo validation.php del modulo en cuestion es que si esta funcionando como IPN esta redireccionando y haciendo otras macanas que no deberia hacer.

 

 

por eso decía que hay varios problemas a solucionar. La firma RedSys se carga la autoría del modulo e incluso adjuntan términos y condiciones en formato pdf, eso también es peligroso ya que teniendo las vulnerabilidades del modulo, se puede hacer un rastreo al pdf  moules/redsys/*.pdf  y obtener una lista completa de las tiendas que lo tienen instalado y Si se pasa por consola en kali se obtiene la madre de las chingadas, no me voy ampliar mucho en este tema por que no quiero dar ideas a maliciosos.

 

Lo que tiene que hacer es dar aviso al soporte técnico.

 

saludos

Link to comment
Share on other sites

Primero aparentemente el archivo validation.php esta hacien de IPN, esto significa que ese archivo recibe la notificación de pago por background, esto quiere decir que la información no es visible para el usuario. En tal caso el archivo esta gestionando mal las llamadas de archivos:

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/../../header.php');
include(dirname(__FILE__).'/redsys.php')


la llamada header.php se debe hacer cuando se necesita el set media de prestashop, o sea los archivos css, js, etc.. para mostrar algun archivo tpl. En este caso si no se mostrar nada al cliente no es necesario, y puede que de error.

Pruebe cambiando eso en el archivo validation.php por esto:

require_once(dirname(__FILE__).'/../../config/config.inc.php');
require_once(dirname(__FILE__).'/../../init.php');
include_once(dirname(__FILE__).'/redsys.php');

luego en la linea 106, 120 hace una redireccion "Tools::redirect('index.php?controller=order&step=1');"   si el archivo es un IPN no debe hacer redirecciones.

 

en la practica hay una confucion con la url de notificacion y la url "DS_MERCHANT_URLOK"  y "DS_MERCHANT_URLKO"

 

Ds_Merchant_MerchantURL --> ES LA URL IPN NOTIFICACION DE PAGO INSTANTANEO (oculta al cliente).

 

Ds_Merchant_UrlOK --> es mayormente opcional en las TPV pero es recomendable usarla, es la url donde se debe regresar al cliente despues de hacer el pago.

 

Ds_Merchant_UrlKO --> es la url donde se regresa al cliente si el pago no se hizo correctamente o si surgio algun problema.

 

lo mas importante es la Ds_Merchant_MerchantURL IPN pues antes de que el cliente regrese ya prestashop va tener el resultado de la operación.

 

Lo que sucede en el archivo validation.php del modulo en cuestion es que si esta funcionando como IPN esta redireccionando y haciendo otras macanas que no deberia hacer.

 

 

por eso decía que hay varios problemas a solucionar. La firma RedSys se carga la autoría del modulo e incluso adjuntan términos y condiciones en formato pdf, eso también es peligroso ya que teniendo las vulnerabilidades del modulo, se puede hacer un rastreo al pdf  moules/redsys/*.pdf  y obtener una lista completa de las tiendas que lo tienen instalado y Si se pasa por consola en kali se obtiene la madre de las chingadas, no me voy ampliar mucho en este tema por que no quiero dar ideas a maliciosos.

 

Lo que tiene que hacer es dar aviso al soporte técnico.

 

saludos

Hice el cambio que propones, y ahora funciona perfectamente, gracias!

Edited by mechamo (see edit history)
Link to comment
Share on other sites

Hice el cambio que propones, pero sigue sin generarse el pedido, el cobro se realiza con éxito (y se supone que la plataforma envía a la web la confirmación), pero prestashop no registrar el pedido, lo deja como carrito abandonado.

 

no va funcionar haciendo solo ese cambio :wacko:  es que el modulo esta mal desarrollado, llama a funciones que no son Objetos y en el caso el ordenes y carrito hay una chingada en esto:

En el archivo redssy.php linea 309 a 321 :

		// El num. de pedido -> id_Carrito + el tiempo SS
		$orderId = $params['cart']->id;
		if(isset($_COOKIE["P".$orderId])) {
			$sec_pedido = $_COOKIE["P".$orderId];
		} else {
			$sec_pedido = -1;
		}
		$logActivo = "si";
		escribirLog(" - COOKIE: ".$_COOKIE["P".$orderId]."($orderId) - secPedido: $sec_pedido", $logActivo);
		if ($sec_pedido < 9) {
			setcookie("P".$orderId, ++$sec_pedido, time() + 86400); // 24 horas
		}
		$numpedido = str_pad($orderId.$sec_pedido, 12, "0", STR_PAD_LEFT);

y en el archivo validation.php

	$pedido = intval(substr($pedidoSecuencial, 0, 11));
	/** VALIDACIONES DE LIBRERÍA **/
	if ($firma_local === $firma_remota
		&& checkImporte($total)
		&& checkPedidoNum($pedido)
		&& checkFuc($codigo)
		&& checkMoneda($moneda)
		&& checkRespuesta($respuesta)) {
		if ($accesoDesde === 'POST') {

			/** Creamos los objetos para confirmar el pedido **/
			$context = Context::getContext();
			$cart = new Cart($pedido);
			$redsys = new redsys(); ...........................

lo que hace el tio es adicionar al id carrito de prestashop un valor extra y completa hasta llegar a 12 con "0" del lado izquiedo, pero le agrega la la hora y no que cosa quiere hacer, entonce el id carrrito quedaria algo asi:

"000000002342" (es un ejemplo al azar)  luego en el archivo validation.php corta la cadena a 11 $pedido = intval(substr($pedidoSecuencial, 0, 11));

quedando $pedido = "2" luego pasa a prestashop como id cart  "2" :unsure: :unsure:

 

hacer que funcione ma o menos seria aplicar esto:

 

buscar en la linea 321 del archvio redsys.php esto :

$numpedido = str_pad($orderId.$sec_pedido, 12, "0", STR_PAD_LEFT);

cambiar eso por esto:

$numpedido = str_pad($orderId, 12, "0", STR_PAD_LEFT);

luego buscar en el archivo validation.php linea 81 esto :

$pedido = intval(substr($pedidoSecuencial, 0, 11));

cambiar eso por esto:

$pedido = (int)$miObj->getParameter('Ds_Order');

puede que eso lo haga funcionar pero lo dudo por que hay que modificar muchos archivos.

Otra cosa que hay que hacer en ese modulo es quitar todas las etiquetas de cierres "?>" de todos los archivos php. eso da errores :unsure:

 

saludos

Link to comment
Share on other sites

no va funcionar haciendo solo ese cambio :wacko:  es que el modulo esta mal desarrollado, llama a funciones que no son Objetos y en el caso el ordenes y carrito hay una chingada en esto:

En el archivo redssy.php linea 309 a 321 :

		// El num. de pedido -> id_Carrito + el tiempo SS
		$orderId = $params['cart']->id;
		if(isset($_COOKIE["P".$orderId])) {
			$sec_pedido = $_COOKIE["P".$orderId];
		} else {
			$sec_pedido = -1;
		}
		$logActivo = "si";
		escribirLog(" - COOKIE: ".$_COOKIE["P".$orderId]."($orderId) - secPedido: $sec_pedido", $logActivo);
		if ($sec_pedido < 9) {
			setcookie("P".$orderId, ++$sec_pedido, time() + 86400); // 24 horas
		}
		$numpedido = str_pad($orderId.$sec_pedido, 12, "0", STR_PAD_LEFT);

y en el archivo validation.php

	$pedido = intval(substr($pedidoSecuencial, 0, 11));
	/** VALIDACIONES DE LIBRERÍA **/
	if ($firma_local === $firma_remota
		&& checkImporte($total)
		&& checkPedidoNum($pedido)
		&& checkFuc($codigo)
		&& checkMoneda($moneda)
		&& checkRespuesta($respuesta)) {
		if ($accesoDesde === 'POST') {

			/** Creamos los objetos para confirmar el pedido **/
			$context = Context::getContext();
			$cart = new Cart($pedido);
			$redsys = new redsys(); ...........................

lo que hace el tio es adicionar al id carrito de prestashop un valor extra y completa hasta llegar a 12 con "0" del lado izquiedo, pero le agrega la la hora y no que cosa quiere hacer, entonce el id carrrito quedaria algo asi:

"000000002342" (es un ejemplo al azar)  luego en el archivo validation.php corta la cadena a 11 $pedido = intval(substr($pedidoSecuencial, 0, 11));

quedando $pedido = "2" luego pasa a prestashop como id cart  "2" :unsure: :unsure:

 

hacer que funcione ma o menos seria aplicar esto:

 

buscar en la linea 321 del archvio redsys.php esto :

$numpedido = str_pad($orderId.$sec_pedido, 12, "0", STR_PAD_LEFT);

cambiar eso por esto:

$numpedido = str_pad($orderId, 12, "0", STR_PAD_LEFT);

luego buscar en el archivo validation.php linea 81 esto :

$pedido = intval(substr($pedidoSecuencial, 0, 11));

cambiar eso por esto:

$pedido = (int)$miObj->getParameter('Ds_Order');

puede que eso lo haga funcionar pero lo dudo por que hay que modificar muchos archivos.

Otra cosa que hay que hacer en ese modulo es quitar todas las etiquetas de cierres "?>" de todos los archivos php. eso da errores :unsure:

 

saludos

Hola, pues si funcionó, ayer no lo probé bien, y pensé que no, pero he vuelto a probar hoy y si funciona perfectamente!

Link to comment
Share on other sites

Hola, pues si funcionó, ayer no lo probé bien, y pensé que no, pero he vuelto a probar hoy y si funciona perfectamente!

 

Claro lo que sucede es que cuando no funciona es por que se esta repitiendo la ordene en RedSys, por lo que deduzco que se ha empleado el time() y concatenado al id carrito para evitar repetir la orden. Con lo que le he dicho le va funcionar siempre y cuando no tenga un error en RedSys, si obtiene un error tendra que cerrar la sesion en su tienda cerrar el navegador y volver crear otra compra demo, para cargar un nuevo id cart.

Una forma mas sencilla de evitarse todos los dolores de cabeza es enviar un pin de orden a RedSys, por ejemplo se puede utilizar el tools de prestashop para crear un key, almacenar ese key en una tabla de DB y al tener la respuesta del tpv buscar el id cart relacionado a ese key.

seria algo asi:

Tools::passwdGen(12, NUMERIC);

con eso creamos una orden con 12 caracteres, que aparentemente es el numero de caracteres que espera el TPV,

 

el resto es crear un tabla base datos para guardar el key y id_cart relacionado, luego hay que hacer algunos cambios en el validation.php para buscar el id_cart

 

medio complicado explicarlo pero sencillo de hacer.

 

saludos

Link to comment
Share on other sites

Por mucho que lo intento, en real, hablando con redsys, el pago es todo correcto pero me lleva al historial de pedidos

 

pos que joder hombre tanto cuesta solicitar los manuales de integración, pida los manuales de integracion al soporte tecnico y post aqui que les hago un modulo funcional.

No he tenido respuesta del TPV, por lo visto estan muy soberbios con la distribución de una porqueria que puede comprometer la integridad de las tiendas Prestashop.

Voy darles un cosejo QUITEN EL MODULO, ELIMINEN EL MODULO, CONTACTEN AL SOPORTE TECNICO,

EL MODULO NO ES FUNCIONAL Y NO ES SEGURO, PUEDEN TENER LA MADRE DE LAS CHINGADAS EN SUS TIENDAS.

SALUDOS

Link to comment
Share on other sites

Yo finalmente he comprado un módulo de pago, por 30€ no merece la pena dar más vueltas con el gratuito si no lo arreglan.

De todas formas a mi me dijeron que había problemas con otro módulo de urls amigables, y de permisos de carpetas, quizás por ahí encontréis el error de este módulo a la hora de finalizar la compra.

Link to comment
Share on other sites

Cuando lo instalé me pasaba lo mismo que con el gratuito, no pasaba el pedido a presashop.

Contacté con el soporte y lo revisaron, y me dijeron que había un problema con los permisos del módulo en el servidor y los corrigieron, sin embargo, seguía sin pasar el pedido a prestashop, por lo que revisaron y vieron que había un problema con un módulo de urls amigables que tengo instalado.

 

Éste módulo probablemetne no permitía redirigir a la página de confirmación de compra, por lo que no se generaba el pedido, por lo que hicieron un cambio en el .htacess para corregirlo y ahora funciona sin problemas.

 

He hecho varias pruebas y ha entrado un pedido real sin problemas, todo ha funcionado correctamente, se ha generado el pedido y me ha redirigido a la página de éxito del pedido. Por lo que ahora funciona perfectamente, de momento.

Edited by garigola (see edit history)
Link to comment
Share on other sites

Hola!

 

Mirad lo que he creado... he programado un plugin de Redsys para Prestashop 1.7

 

A ver qué os parece

 

https://modulos-prestashop.com/descarga-modulo-redsys-prestashop-1-7

 

Gracias!

 

que os parece?  dices que hicieron un analisis?

Mi humilde opinion, primero parece un clon del que reparte redsys, y como copia se esta copiando los mismos errores, la arquitectura errónea y las mismas vulnerabilidades.

Como principio le paso el analisis via consola de un solo archivo, los demas poseen problemas mas serios:


FILE: redsys17.php
----------------------------------------------------------------------
FOUND 715 ERRORS AND 38 WARNINGS AFFECTING 601 LINES
----------------------------------------------------------------------
   1 | WARNING | [ ] A file should declare new symbols (classes,
     |         |     functions, constants, etc.) and cause no other
     |         |     side effects, or it should execute logic with
     |         |     side effects, but should not do both. The first
     |         |     symbol is defined on line 11 and the first side
     |         |     effect is on line 5.
   8 | ERROR   | [x] Inline control structures are not allowed
   9 | ERROR   | [x] Spaces must be used to indent lines; tabs are
     |         |     not allowed
  11 | ERROR   | [ ] Each class must be in a namespace of at least
     |         |     one level (a top-level vendor name)
  13 | ERROR   | [x] Spaces must be used to indent lines; tabs are
     |         |     not allowed
  13 | ERROR   | [x] Scope keyword "private" must be followed by a
     |         |     single space
  13 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  14 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  15 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  17 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  18 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  20 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  22 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  23 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  24 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  25 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  26 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  27 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  29 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  30 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  32 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  33 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  34 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  35 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  36 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  37 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  38 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  39 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  40 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  41 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  42 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  43 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  44 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  45 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  46 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  48 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  49 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  49 | ERROR   | [x] Expected 1 space after closing parenthesis;
     |         |     found 9
  50 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  51 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  52 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  53 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  54 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  55 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  56 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  57 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  58 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  59 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  60 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  61 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  62 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  63 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  65 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  65 | ERROR   | [x] Inline control structures are not allowed
  66 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  67 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  67 | ERROR   | [x] Inline control structures are not allowed
  68 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  69 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  69 | ERROR   | [x] Inline control structures are not allowed
  70 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  71 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  71 | ERROR   | [x] Inline control structures are not allowed
  72 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  73 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  73 | ERROR   | [x] Inline control structures are not allowed
  74 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  75 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  75 | ERROR   | [x] Inline control structures are not allowed
  76 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  77 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  77 | ERROR   | [x] Inline control structures are not allowed
  78 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  79 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  79 | ERROR   | [x] Inline control structures are not allowed
  80 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  81 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  81 | ERROR   | [x] Inline control structures are not allowed
  82 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  84 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  84 | ERROR   | [x] Inline control structures are not allowed
  85 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  87 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  89 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  90 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  91 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  92 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  93 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  94 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  96 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  98 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  99 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
  99 | ERROR   | [x] Inline control structures are not allowed
 100 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 101 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 102 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 103 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 104 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 105 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 106 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 107 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 108 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 110 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 110 | WARNING | [ ] Line exceeds 120 characters; contains 122
     |         |     characters
 111 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 113 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 114 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 115 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 116 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 117 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 118 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 119 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 120 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 121 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 122 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 123 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 124 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 125 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 126 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 127 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 129 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 131 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 132 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 133 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 134 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 135 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 136 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 137 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 138 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 139 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 140 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 141 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 142 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 143 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 144 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 145 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 146 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 148 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 150 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 151 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 152 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 154 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 156 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 157 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 158 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 159 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 160 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 161 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 162 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 163 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 164 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 165 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 166 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 167 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 168 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 169 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 171 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 171 | WARNING | [ ] Method name "_postValidation" should not be
     |         |     prefixed with an underscore to indicate
     |         |     visibility
 172 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 173 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 174 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 174 | ERROR   | [x] Expected 1 space after closing parenthesis;
     |         |     found 9
 175 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 176 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 176 | ERROR   | [x] Expected 0 spaces after opening bracket; newline
     |         |     found
 177 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 178 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 179 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 180 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 180 | ERROR   | [x] Opening parenthesis of a multi-line function
     |         |     call must be the last content on the line
 180 | WARNING | [ ] Line exceeds 120 characters; contains 190
     |         |     characters
 181 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 182 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 182 | ERROR   | [x] Multi-line function call not indented correctly;
     |         |     expected 16 spaces but found 20
 182 | ERROR   | [x] Closing parenthesis of a multi-line function
     |         |     call must be on a line by itself
 183 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 184 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 184 | ERROR   | [x] Expected 0 spaces after opening bracket; newline
     |         |     found
 185 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 186 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 187 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 188 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 188 | ERROR   | [x] Opening parenthesis of a multi-line function
     |         |     call must be the last content on the line
 188 | WARNING | [ ] Line exceeds 120 characters; contains 173
     |         |     characters
 189 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 190 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 190 | ERROR   | [x] Multi-line function call not indented correctly;
     |         |     expected 16 spaces but found 20
 190 | ERROR   | [x] Closing parenthesis of a multi-line function
     |         |     call must be on a line by itself
 191 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 192 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 192 | ERROR   | [x] Expected 0 spaces after opening bracket; newline
     |         |     found
 193 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 194 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 195 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 196 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 196 | ERROR   | [x] Opening parenthesis of a multi-line function
     |         |     call must be the last content on the line
 196 | WARNING | [ ] Line exceeds 120 characters; contains 185
     |         |     characters
 197 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 198 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 198 | ERROR   | [x] Multi-line function call not indented correctly;
     |         |     expected 16 spaces but found 20
 198 | ERROR   | [x] Closing parenthesis of a multi-line function
     |         |     call must be on a line by itself
 199 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 200 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 200 | ERROR   | [x] Expected 0 spaces after opening bracket; newline
     |         |     found
 201 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 202 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 203 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 204 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 204 | ERROR   | [x] Opening parenthesis of a multi-line function
     |         |     call must be the last content on the line
 204 | WARNING | [ ] Line exceeds 120 characters; contains 167
     |         |     characters
 205 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 206 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 206 | ERROR   | [x] Multi-line function call not indented correctly;
     |         |     expected 16 spaces but found 20
 206 | ERROR   | [x] Closing parenthesis of a multi-line function
     |         |     call must be on a line by itself
 207 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 208 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 208 | ERROR   | [x] Expected 0 spaces after opening bracket; newline
     |         |     found
 209 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 210 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 211 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 212 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 212 | ERROR   | [x] Opening parenthesis of a multi-line function
     |         |     call must be the last content on the line
 212 | WARNING | [ ] Line exceeds 120 characters; contains 136
     |         |     characters
 213 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 214 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 214 | ERROR   | [x] Multi-line function call not indented correctly;
     |         |     expected 16 spaces but found 20
 214 | ERROR   | [x] Closing parenthesis of a multi-line function
     |         |     call must be on a line by itself
 215 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 216 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 217 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 219 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 219 | WARNING | [ ] Method name "_postProcess" should not be
     |         |     prefixed with an underscore to indicate
     |         |     visibility
 220 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 221 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 222 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 222 | ERROR   | [x] Expected 1 space after closing parenthesis;
     |         |     found 9
 223 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 224 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 225 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 226 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 227 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 228 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 229 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 230 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 231 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 232 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 233 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 236 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 237 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 238 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 239 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 240 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 242 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 243 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 243 | WARNING | [ ] Line exceeds 120 characters; contains 157
     |         |     characters
 244 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 245 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 246 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 247 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 248 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 250 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 251 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 252 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 253 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 254 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 254 | WARNING | [ ] Line exceeds 120 characters; contains 122
     |         |     characters
 255 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 257 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 257 | WARNING | [ ] Method name "_displayRedsys" should not be
     |         |     prefixed with an underscore to indicate
     |         |     visibility
 258 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 259 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 260 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 261 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 261 | WARNING | [ ] Line exceeds 120 characters; contains 310
     |         |     characters
 262 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 262 | WARNING | [ ] Line exceeds 120 characters; contains 121
     |         |     characters
 263 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 263 | WARNING | [ ] Line exceeds 120 characters; contains 149
     |         |     characters
 264 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 266 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 266 | WARNING | [ ] Method name "_displayForm" should not be
     |         |     prefixed with an underscore to indicate
     |         |     visibility
 267 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 269 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 270 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 271 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 272 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 273 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 274 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 275 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 276 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 277 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 278 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 279 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 280 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 281 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 281 | ERROR   | [x] Space before opening parenthesis of function
     |         |     call prohibited
 281 | ERROR   | [x] Space after opening parenthesis of function call
     |         |     prohibited
 281 | ERROR   | [x] Expected 0 spaces before closing bracket; 1
     |         |     found
 282 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 282 | WARNING | [ ] Line exceeds 120 characters; contains 161
     |         |     characters
 283 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 284 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 285 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 286 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 287 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 288 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 289 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 290 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 291 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 292 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 292 | WARNING | [ ] Line exceeds 120 characters; contains 121
     |         |     characters
 293 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 293 | WARNING | [ ] Line exceeds 120 characters; contains 121
     |         |     characters
 294 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 294 | WARNING | [ ] Line exceeds 120 characters; contains 121
     |         |     characters
 295 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 296 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 297 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 298 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 299 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 300 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 301 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 302 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 303 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 304 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 305 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 306 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 306 | WARNING | [ ] Line exceeds 120 characters; contains 129
     |         |     characters
 307 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 308 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 309 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 310 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 311 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 312 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 313 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 313 | WARNING | [ ] Line exceeds 120 characters; contains 134
     |         |     characters
 314 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 315 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 316 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 317 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 318 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 319 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 320 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 321 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 322 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 323 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 324 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 324 | WARNING | [ ] Line exceeds 120 characters; contains 123
     |         |     characters
 325 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 325 | WARNING | [ ] Line exceeds 120 characters; contains 121
     |         |     characters
 326 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 327 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 328 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 329 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 330 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 331 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 332 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 333 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 334 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 335 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 336 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 336 | WARNING | [ ] Line exceeds 120 characters; contains 151
     |         |     characters
 337 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 338 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 339 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 340 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 341 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 342 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 343 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 343 | WARNING | [ ] Line exceeds 120 characters; contains 163
     |         |     characters
 344 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 345 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 346 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 347 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 348 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 349 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 350 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 350 | WARNING | [ ] Line exceeds 120 characters; contains 128
     |         |     characters
 351 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 352 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 353 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 354 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 355 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 356 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 357 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 358 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 359 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 360 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 361 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 362 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 363 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 364 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 365 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 366 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 367 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 368 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 369 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 370 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 371 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 372 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 373 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 374 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 375 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 376 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 377 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 378 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 379 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 380 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 381 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 382 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 383 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 384 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 385 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 386 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 387 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 389 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 390 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 391 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 392 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 393 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 394 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 396 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 397 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 398 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 399 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 400 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 401 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 401 | WARNING | [ ] Line exceeds 120 characters; contains 156
     |         |     characters
 403 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 404 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 405 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 406 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 407 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 408 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 409 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 410 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 411 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 412 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 414 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 416 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 418 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 419 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 420 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 421 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 422 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 423 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 424 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 425 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 426 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 427 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 428 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 429 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 430 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 431 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 432 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 433 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 435 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 435 | WARNING | [ ] Method name "_displayErrorForm" should not be
     |         |     prefixed with an underscore to indicate
     |         |     visibility
 436 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 437 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 437 | ERROR   | [x] Expected 1 space after IF keyword; 0 found
 437 | ERROR   | [x] Expected 0 spaces after opening bracket; 1 found
 437 | ERROR   | [x] Expected 0 spaces before closing bracket; 1
     |         |     found
 438 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 442 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 442 | ERROR   | [x] Space found after opening bracket of FOREACH
     |         |     loop
 442 | ERROR   | [x] Expected 0 spaces after opening bracket; 1 found
 443 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 447 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 448 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 451 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 452 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 454 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 455 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 456 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 456 | ERROR   | [x] Expected 1 space after closing parenthesis;
     |         |     found 9
 457 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 458 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 459 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 459 | ERROR   | [x] Inline control structures are not allowed
 460 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 461 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 461 | ERROR   | [x] Expected 1 space after ELSE keyword; newline
     |         |     found
 461 | ERROR   | [x] Inline control structures are not allowed
 462 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 463 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 463 | ERROR   | [x] Expected 1 space after closing brace; newline
     |         |     found
 464 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 464 | ERROR   | [x] Expected 1 space after ELSE keyword; newline
     |         |     found
 464 | ERROR   | [x] Inline control structures are not allowed
 465 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 467 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 468 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 469 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 470 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 471 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 472 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 474 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 474 | WARNING | [ ] Method name "_displayHelpRedsys" should not be
     |         |     prefixed with an underscore to indicate
     |         |     visibility
 475 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 476 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 477 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 478 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 478 | WARNING | [ ] Line exceeds 120 characters; contains 131
     |         |     characters
 479 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 481 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 482 | WARNING | [ ] Line exceeds 120 characters; contains 207
     |         |     characters
 483 | WARNING | [ ] Line exceeds 120 characters; contains 179
     |         |     characters
 484 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 484 | WARNING | [ ] Line exceeds 120 characters; contains 303
     |         |     characters
 485 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 486 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 487 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 488 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 490 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 491 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 492 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 492 | ERROR   | [x] Inline control structures are not allowed
 492 | ERROR   | [x] Expected 0 spaces after opening bracket; 1 found
 492 | ERROR   | [x] Space after opening parenthesis of function call
     |         |     prohibited
 492 | ERROR   | [x] Expected 0 spaces before closing bracket; 1
     |         |     found
 493 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 495 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 496 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 498 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 498 | ERROR   | [x] Inline control structures are not allowed
 499 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 501 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 501 | ERROR   | [x] Inline control structures are not allowed
 502 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 504 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 505 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 506 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 508 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 509 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 509 | ERROR   | [x] Expected 1 space after IF keyword; 0 found
 510 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 511 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 512 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 513 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 515 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 516 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 516 | WARNING | [ ] Line exceeds 120 characters; contains 126
     |         |     characters
 517 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 518 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 519 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 520 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 522 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 523 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 524 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 525 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 526 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 527 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 528 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 528 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 528 | ERROR   | [x] Whitespace found at end of line
 529 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 530 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 531 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 532 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 533 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 534 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 536 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 537 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 547 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 548 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 549 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 550 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 551 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 552 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 552 | ERROR   | [x] Inline control structures are not allowed
 553 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 553 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 553 | ERROR   | [x] Whitespace found at end of line
 554 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 554 | ERROR   | [x] No space found after comma in function call
 554 | ERROR   | [x] No space found after comma in function call
 556 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 557 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 558 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 558 | ERROR   | [x] Expected 1 space after closing parenthesis;
     |         |     found 9
 559 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 560 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 562 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 562 | ERROR   | [x] Expected 1 space after closing parenthesis;
     |         |     found 13
 563 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 564 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 565 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 565 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 566 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 566 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 567 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 568 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 568 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 569 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 569 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 570 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 571 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 571 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 572 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 572 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 573 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 574 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 574 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 575 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 575 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 576 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 577 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 577 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 578 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 578 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 579 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 580 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 580 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 581 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 581 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 582 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 583 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 583 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 584 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 584 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 585 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 586 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 586 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 587 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 587 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 588 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 589 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 589 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 590 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 590 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 591 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 592 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 592 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 593 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 593 | ERROR   | [x] Terminating statement must be indented to the
     |         |     same level as the CASE body
 594 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 595 | ERROR   | [x] Spaces must be used for alignment; tabs are not
     |         |     allowed
 595 | ERROR   | [x] Line indented incorrectly; expected at least 20
     |         |     spaces, found 16
 596 | ERROR   | [x] Spaces must be used for alignment; tabs are no