Easyredsys es una librería basada en Java que facilita la integración de cualquier TPV Virtual de entidades bancarias colaboradoras con Redsys, como BSCH, BBVA, ING Direct, La Caixa, etc. (ver listado completo de entidades colaboradoras), realizando todo el trabajo técnico y centrándose en la funcionalidad final para los integradores de medios de pago.
Easyredsys está basada en las librerías oficiales Java de Redsys pero añadiendon una serie de funcionalidades, las cuales facilitan muchísimo su integración en cualquier aplicación, ya sea de escritorio, web o móvil como Android.
Permite realizar compras CES, compras No CES, autorizaciones, autenticaciones, devoluciones, pagos diferidos y pagos recurrentes ocultando toda la complejidad al desarrollador.
Easyredsys es software libre y está distribuida mediante The Apache Software License, Version 2.0. En los repositorios centrales de maven tienes disponible esta librería ya empaquetada disponible para usar o si lo prefieres puedes compilarla tú mismo desde el código fuente que se encuentra en Github en la dirección https://github.com/majulvez/easyredsys
En el código fuente hay un module de ejemplo de cómo integrar la librería en un proyecto real basado en gradle. Dentro de ese módulo hay un fichero llamado index.jsp en el cual hay un ejemplo funcional de realización de una compra tipo Comercio Electrónico Seguro (CES) y otra de tipo No CES usando integración por servicios web. Puedes ver funcionando el módulo en esta dirección https://easyredsys.miguelangeljulvez.com/easyredsys/
Ejemplo de Uso: Compra CES - Comunicación easyredsys -> banco
Lo primero de todo, añade la dependencia maven a tu proyecto
<dependency> <group>com.miguelangeljulvez.easyredsys</group> <name>easyredsys-client</name> <version>1.3.0</version> </dependency>
A continuación, crea una clase que implemente la interfaz AppConfig e introduce los datos de tu pasarela que te habrá facilitado tu entidad bancaria
import com.miguelangeljulvez.easyredsys.client.AppConfig; import com.miguelangeljulvez.easyredsys.client.core.Notification; public class AppConfigImpl implements AppConfig { @Override public String getMerchantCode() { return "061978060"; //Este es el código de comercio } @Override public String getTerminal() { return "001"; //Este es el identificador de la terminal } @Override public String getSecretKey() { return "<tu-clave-de-produccion>"; //Esta es la clave secreta de tu pasarela en PRODUCCIÓN //La clave de preproducción es igual para todas las pasarelas por lo que no tienes que indicarla } @Override public boolean isTestMode() { return true; //Establécelo a false cuando quieras hacer funcionar la pasarela en el entorno de producción } @Override public void saveNotification(Notification notification) { // Pon aquí lo que quieras hacer con la notificación. Seguramente, almacenar en tu base de datos que el pedido ha sido pagado // Las notificaciones aquí recibidas ya han pasado todas las comprobaciones de seguridad y son válidas } }
A continuación, modifica tu aplicación para usar Easyredsys
<% OrderCES orderCES = new OrderCES.Builder(AppConfigImpl.class) .transactionType(TransactionType.AUTORIZACION) .currency(Currency.EUR) .consumerLanguage(Language.SPANISH) .order("<Identificador único>") //Identificador que debes generar con 12 caracteres máximo y único .amount(<Cantidad a cobrar>) //La cantidad es sin decimales. Por ejemplo, 10.00€ correspondería al valor 1000 .productDescription("Product description") .payMethods(PaymentMethod.TARJETA) .urlOk(<La url al terminar el proceso del banco con éxito>) //La página a la que redirigir al usuario después de que la compra ha finalizado correctamente .urlKo(<La url al terminar el proceso del banco con fallo>) //La página a la que redirigir al usuario después de que la compra ha finalizado erróneamente .urlNotification(<La url de tu servicio de recogida de notificaciones>) //Ver sección notificaciones mas adelante .build(); MessageOrderCESRequest messageOrderCESRequest = new MessageOrderCESRequest.Builder(orderCES).build(); %>
Y crea el formulario que se comunicará con la pasarela de pago
<form action="<%=messageOrderCESRequest.getRedsysUrl()%>" method="post"> <input name="Ds_SignatureVersion" value="<%=messageOrderCESRequest.getDs_SignatureVersion()%>" type="hidden"/> <input name="Ds_MerchantParameters" value="<%=messageOrderCESRequest.getDs_MerchantParameters()%>" type="hidden"/> <input name="Ds_Signature" value="<%=messageOrderCESRequest.getDs_Signature()%>" type="hidden"/> <input type="submit" value="Submit"/> </form>
Y ya está todo
Ejemplo de Uso: Compra CES - Comunicación banco -> easyredsys
Si además quieres que la librería reciba las notifiaciones del banco (recomendado) debes importar esta librería a tu proyecto web para que Easyredsys pueda recibir todos los tipos de notificaciones del banco,
<dependency> <group>com.miguelangeljulvez.easyredsys</group> <name>easyredsys-server</name> <version>1.3.0</version> </dependency>
Esta librería, habilita uno servicios web axis/jax-ws/jax-rs para que el banco pueda llamar a tu aplicación con las notificaciones de los pedidos realizados.
Para usar estos servicios, debes añadir los ficheros web.xml, sun-jaxws.xml y server-config.wsdd que se encuentran dentro del ejemplo de integración que hay en el código fuente (submodulo integration-example-war) en el directorio webapps/WEB-INF de tu proyecto. Ese mismo módulo puedes verlo funcionando en https://easyredsys.miguelangeljulvez.com
Una vez hecho esto, arranca tu servidor de aplicaciones (esta librería ha sido testeada con apache tomcat 8 y 9, wildfly 10, 11, 12, 13, 14 y 15 y payara 5) y despliega tu aplicación web. Para comprobar que los servicios están escuchando accede las siguientes url:
Notificaciones SOAP - recomendada (Notificación on-line: literal): https://<urlDeTuSitio>/<contexto>/literal/InotificacionSIS
Notificaciones SOAP (Notificación on-line: con wsdl y sin wsdl): https://<urlDeTuSitio>/<contexto>/axis/InotificacionSIS
Notificaciones REST (Notificación on-line: síncrona y asíncrona): https://<urlDeTuSitio>/<contexto>/rest/InotificacionSIS
Deberás usar una de estas 3 urls a la hora de crear el pedido según el tipo de notificación que hayas configurado en la pasarela de pago. Por ejemplo:
OrderCES orderCES = new OrderCES.Builder(AppConfigImpl.class) ... .urlNotification("https://<urlDeTuSitio>/<contexto>/rest/InotifiacionSIS") .build();
Date cuenta que es simplemente añadir una linea a la creación del objeto que hemos creado en el ejemplo de uso anterior
Las notificaciones que envía el banco son recibidas en el método saveNotificacion() de la clase AppConfigImpl.java que has implementado
@Override public void saveNotification(Notification notification) { System.out.println("NOTIFICACIÓN RECIBIDA DEL BANCO: "); System.out.println(notification); }
Las notificaciones que aquí se reciben ya han pasado todas las verificaciones y controles de seguridad. En el objeto Notificacion tienes toda la información enviada por Redsys, incluido el orderId, para que marques en tu backend los pedidos como realizados.
Y nada más. Ya puedes empezar a vender a través de redsys en tu ecommerce
Ejemplo de Uso: Compra No CES - Comunicación easyredsys -> banco -> easyredsys
El uso de easyredsys para la integración mediante servicios web con el envío de tarjeta es muy similar a lo que hemos visto hasta ahora
La diferencia que hemos visto con el método CES es que no hay un formulario que se envía que redirige al usuario a una página del banco, sino que es tu aplicación quien recoge los datos de la tarjeta y se comunica con el banco directamente sin que tu usuario abandone tu portal
OrderNoCES orderNoCES = new OrderNoCES.Builder(AppConfigImpl.class) .transactionType(TransactionType.AUTORIZACION) .currency(Currency.EUR) .order(String.valueOf(getRandomOrder())) .amount(1000) .cardNumber("4548812049400004") .cvv2("123") .expiryDate("2012") .build(); MessageOrderNoCESRequest messageOrderNoCESRequest = new MessageOrderNoCESRequest.Builder(orderNoCES).build(); String codigo = null; try { MessageOrderNoCESResponse messageOrderNoCESResponse = EasyRedsysService.request(messageOrderNoCESRequest); codigo = messageOrderNoCESResponse.getCodigo(); } catch (OperationException e) { e.printStackTrace(); codigo = e.getCode(); }
Sino se produce ninguna OperationException, la compra se ha realizado correctamente.
En el código fuente de github puedes ver una serie de test funcionales con ejemplos para la realización de las distintas operaciones: autorizaciones, devoluciones, pagos recurrentes, etc
También tienes disponible el javadoc de la librería en esta dirección https://easyredsys.miguelangeljulvez.com/easyredsys/javadoc/
Esta librería es comunmente usada también para la venta de productos desde apps móviles tipo Android o IOS, instalándola en un servidor y haciendo que la aplicación móvil se comunique con easyredsys usando un webview para la compra CES o un servicio web para la compra No CES. ¡Y sin comisiones de por medio!
Si deseas que te ayude con la integración de la pasarela Redsys en tus sistemas o si deseas conocer cómo personalizar la página web del banco para que tenga el aspecto de tu web al realizar la compra, puedes ponerte en contacto conmigo a través de este formulario