Coder Social home page Coder Social logo

majulvez / easyredsys Goto Github PK

View Code? Open in Web Editor NEW
12.0 3.0 6.0 273 KB

Librería que facilita la integración con la pasarela de pago Redsys para aplicaciones Java

Home Page: https://www.miguelangeljulvez.com/es/servicios/desarrollo-software/easyredsys

License: GNU General Public License v3.0

Java 100.00%
compra pagos banco java

easyredsys's Introduction

EASY REDSYS

Esta librería facilita la integración con la pasarela de pago Redsys para aplicaciones Java.

Permite realizar compras CES, compras No CES con envío de datos de la tarjeta, autorizaciones, devoluciones, pagos diferidos y pagos recurrentes

##Requisitos##

  1. Java 1.8.x
  2. Git (opcional)

##Compilación (Opciona)##

./gradlew clean install

Instalación

En el submódulo "integration-example-war" hay un ejemplo de integración de esta librería.

Puedes ver el ejemplo de integración funcionando en esta dirección: https://easyredsys.miguelangeljulvez.com

Servidores de aplicaciones testeados

Apache Tomcat 8 y 9, Wildfly 12, 13, 14 y 15, Payara 5

###Integrar el jar en tu proyecto y modifica tu aplicación###

Añade como dependencia maven lo siguiente

<dependency>
  <group>com.miguelangeljulvez.easyredsys</group>
  <name>easyredsys-client</name>
  <version>1.3.2</version>
</dependency>

A continuación, implementa la interfaz AppConfig en una clase llamada por ejemplo AppConfigImpl e introduce los datos de tu pasarela de pago. Por ejemplo:

import com.miguelangeljulvez.easyredsys.client.AppConfig;

public class AppConfigImpl implements AppConfig {

    @Override
    public String getMerchantCode() {
        return "061978060";
    }

    @Override
    public String getTerminal() {
        return "001";
    }

    @Override
    public String getSecretKey() {
        return "23423524234"; //Si testMode está establecido a true, no se usa. Se usa la clave de pruebas por defecto.
    }

    @Override
    public boolean isTestMode() {
         return true; //Establécelo a false cuando quieras pasar a real
    }

    @Override
    public void saveNotification(Notification notification) {
        // Pon aquí lo que quieras hacer con la notificación recibida del banco. Ver apartado "Notificaciones" es este mismo fichero
    }
}

OPCIÓN A - Compra mediante Comercio Electrónico Seguro (los datos de la tarjeta son solicitados por el banco)

1- Crea la orden de compra en tu aplicación

El pedido puede crearse mediantes POJO

OrderCES orderCES = new OrderCES.Builder(AppConfigImpl.class)
                        .transactionType(TransactionType.AUTORIZACION)
                        .currency(Currency.EUR)
                        .consumerLanguage(Language.SPANISH)
                        .order("<Identificador único>")
                        .amount(<Cantidad a cobrar>)
                        .productDescription("Product description")
                        .payMethods(PaymentMethod.TARJETA)
                        .urlOk(<La url al terminar el proceso del banco con éxito>)
                        .urlKo(<La url al terminar el proceso del banco con fallo>)
                        .urlNotification(<La url de tu servicio de recogida de notificaciones>)
                        .build();

MessageOrderCESRequest messageOrderCESRequest = new MessageOrderCESRequest().Builder(orderCES).build();

2-Crear el formulario de envío para comunicarse con el banco

<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>

3- Crea las páginas de urlOk y urlKo del banco

4- Indica qué hacer con las notificaciones del banco. Ver mas adelante el apartado 'Notificaciones'

OPCIÓN B - Compra mediante Comercio Electrónico No Seguro (los datos de la tarjeta son solicitados por tu aplicación)

1- Crea la orden de compra en tu aplicación

OrderNoCES orderNoCES = new OrderNoCES.Builder(AppConfigImpl.class)
            .transactionType(TransactionType.AUTORIZACION)
            .currency(Currency.EUR)
            .order(<Identificador único>)
            .amount(<Cantidad a cobrar>)
            .cardNumber("4548812049400004")
            .cvv2("123")
            .expiryDate("2012")
            .build();

MessageOrderNoCESRequest messageOrderNoCESRequest = new MessageOrderNoCESRequest.Builder(orderNoCES).build();

try {
    MessageOrderNoCESResponse messageOrderNoCESResponse = EasyRedsysService.request(messageOrderNoCESRequest);
} catch (OperationException e) {
    e.printStackTrace();
}

2- Si no se produce ninguna excepción, la petición se ha realizado correctamente.

Si se produjera alguna excepción, la descripción del error aparecerá en los logs. También se puede obtener el código de error desde la excepción:

    e.getCode();

Notificaciones

<dependency>
  <group>com.miguelangeljulvez.easyredsys</group>
  <name>easyredsys-server</name>
  <version>1.3.2</version>
</dependency>

Las notificaciones se reciben en el método saveNotificacion() de la interfaz AppConfig que has implementado previamente.

Las notificaciones que llegan a ese método han pasado todas las verificaciones y controles de seguridad.

Para publicar los diferentes servicios, deberás copiar el contenido de los ficheros web.xml, sun-jaxws.xml y server-config.wsdd del submódulo "integration-example-war" al directorio WEB-INF de tu aplicación.

Notificación ON-LINE: síncrona y asíncrona

orderCES.setDs_merchant_merchantURL("https://<servidor>/<context>/rest/InotificacionSIS");

o desde el builder del constructor

new OrderCES.Builder()
   ...
   .urlNotificacion("https://<servidor>/<context>/rest/InotificacionSIS")
   .build()

Notificación ON-LINE: SOAP sin wsdl y con wsdl

orderCES.setDs_merchant_merchantURL("https://<servidor>/<context>/axis/InotificacionSIS");

o desde el builder del constructor

new OrderCES.Builder()
   ...
   .urlNotificacion("https://<servidor>/<context>/axis/InotificacionSIS")
   .build()

Notificación ON-LINE; SOAP literal (recomendada)

orderCES.setDs_merchant_merchantURL("https://<servidor>/<context>/literal/InotificacionSIS");

o desde el builder del constructor

new OrderCES.Builder()
   ...
   .urlNotificacion("https://<servidor>/<context>/literal/InotificacionSIS")
   .build()

easyredsys's People

Contributors

majulvez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

easyredsys's Issues

Error firma invalida en producción

Cuando hemos usado la libreria en producción nos da un error de firma invalida cuando llega la notificación por parte de redsys, por lo que he visto es problema de la instanciación del AppConfig, cuando hace el getSecretKey() devuelve la contraseña de test en vez de la de producción.

Hemos probado a instanciar la clase por reflexión como haces en el INotificationSisRest pero al hacer getSecretKey() pasa exactamente lo mismo, devuelve la secret key de test.

La clase OrderCES.Builder no permite hacer pagos con decimales.

Hola,

Estoy utilizando el pago seguro y me acabo de dar cuenta que la cantidad (campo amount) es de tipo long. Entonces, ¿no es posible enviar un pago de 9,99?

` public static class Builder {

    private long merchantCode;
    private long terminal;
    private String transactionType;
    private long currency;
    private int consumerLanguage;
    private String order;
    private long amount;
    private String urlOk;
    private String urlKo;
    private String urlNotification;
    private String productDescription;
    private String payMethods;`

Un saludo.

Inyectar AppConfig en WebService publicado en Tomcat 8.5

No consigo inyectar de ninguna manera la clase que implementa AppConfig. He configurado satisfactoriamente Weld, pero al parecer solo me permite inyectar el bean en Servlets, Filters y Listeners.

Estoy atado a Tomcat por lo que no puedo cambiar a WildFly u otro AS así que si alguien se ha encontrado con este problema se agredece cualquier ayuda.

Error en códigos de error

En la siguiente línea se introduce como código de error un número de clave diferente al del valor. Creo que se trata de un error

Además, según Alvaro Lara, se han añadido algunos códigos:
https://www.alvarolara.com/2015/05/09/codigos-de-respuesta-en-los-tpv-de-redsys/
¿Ves conveniente añadirlos? Podría hacer un PR si consiguiera sacar algo de tiempo.

Gracias por tu esfuerzo en el proyecto

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.