En este tutorial te contamos paso a paso como integrar el TPV de Redsys en aplicaciones web de Microsoft .NET
1. (Opción A): Importar librería RedsysAPI.dll desde la web de Redsys
1. (Opción B): Instalar el paquete RedsysTPV desde el NuGet de Visual Studio
2. Redsys Manual TPV Virtual
3. Qué significa integrar un TPV por Redirección
4. DS_MERCHANT_MERCHANTCODE: Código de Comercio
5. DS_MERCHANT_ORDER: Número de Pedido
5.1. Cómo calcular el DS_MERCHANT_ORDER
6. DS_MERCHANT_CURRENCY: Moneda para el pago
7. DS_MERCHANT_AMOUNT: Importe de pago
8. DS_MERCHANT_TRANSACTIONTYPE: Tipo de Transacción
9. DS_MERCHANT_TERMINAL: Terminal
10. DS_MERCHANT_URL: URL pública del ecommerce
11. DS_MERCHANT_URLOK: URL de salida para Pago Correcto
12. DS_MERCHANT_URLKO: URL de salida para Pago Incorrecto
Enviar la petición a Redsys través de un Formulario Web
13. Cómo crear el Formulario para enviar la Petición al TPV Virtual
Qué es Newtonsoft.Json
Acerca de la librería Newtonsoft.Json en MVC
Contacto Redsys
Teléfono Redsys TPV Virtual
TPV Redsys Error 9051
Explicación del error 9051, que no aparece en los manuales de Redsys
En AM te ayudamos con tu TPV y con tu Ecommerce
Contacta con nosotros
Vamos a la página de Redsys: http://www.redsys.es/
En la barra de navegación hacemos click en "Descargas".
Buscamos la API de .NET para integración por redirección:
Se va a descargar un archivo *.zip que contiene una solución para Visual Studio.
Abrimos el archivo RedsysAPI.sln (se recomienda utilizar Visual Studio 2017).
Vemos que se trata de una solución compuesta por tres proyectos. El primero de ellos es la librería de clases cuya compilación genera RedsysAPI.dll que es lo que estamos buscando. Esta dll la podemos coger de la carpeta bin del proyecto WebRedsysAPI. Para no complicarnos, en la siguiente imagen se muestra como localizarla de forma rápida. No merece la pena intentar entender por qué Redsys no nos proporciona esta dll en una descarga directa.
Una vez tenemos la librería localizada, tenemos que añadirla a nuestro proyecto web. Se recomienda incluir una carpeta en la solución que contenga la librería, y desde ahí referenciarla. De esta forma no tendremos ningún problema ni con las compilaciones ni al generar una release:
Desde Visual Studio accedemos al Nuget. Si introducimos como criterio de búsqueda "Redsys" nos aparecerán 3 opciones. Hay que seleccionar el paquete RedsysTPV:
Esta opción tiene la ventaja de que la librería RedsysAPI.dll y sus dependencias quedarán automáticamente referenciadas dentro de nuestro proyecto web.
Si nos vamos a la carpeta packages que genera el NuGet, encontramos fácilmente las librería de Redsys:
El manual original para la integración del TPV de Redsys por Redirección podéis descargarlo pulsando sobre el enlace:
Recomiendo un vistazo rápido al manual para tener una idea general del proceso de integración. Pero recomendamos no ceñirse demasiado a él. El manual original de Redsys fue concebido para Java y PHP. Posteriormente adaptado a .NET, por lo tanto puede resultar un tanto confuso.
Cuando en una web, tienda online o ecommerce operamos con un TPV básicamente ocurre un ciclo de 3 pasos:
1. Invocamos un TPV.
2. Operamos dentro de la pasarela del TPV.
3. Volvemos al sitio web que invocó el TPV.
Mecanismo de Integración por Redirección significa que vamos a tener que enviar un POST a una URL ajena que nos va a redirigir al inicio de la pasarela.
Normalmente la redirección se realizará como respuesta al submit de un formulario web.
En la siguiente imagen se muestra el esquema general del proceso:
El Merchant Code es el código de comercio que Redsys nos asigna cuando damos de alta el TPV.
Ejemplo de Merchant Code: 999008881
Es un código númerico, en principio no contiene caracteres.
Cuando llamemos al Soporte Técnico de Redsys (902 106 223), lo primero que nos van a preguntar es el Número de Comercio.
¿Es necesario llamar a un 902? El teléfono GRATUITO de Redsys que hasta ahora ha funcionado es este: 91 121 92 50
El TPV de Redsys exige que se utilice siempre un número de pedido (merchant order) distinto.
Esto significa que el TPV no se puede invocar 2 veces con el mismo número de pedido.
En el anexo 8.1 del manual del TPV de Redsys encontramos como hay que formar el Número de Pedido o DS_MERCHANT_ORDER:
Hay que formar un String de longitud 12 que tiene que ser de uso único. Vamos a proponer un formato para crear los números de pedido en base a la fecha y a una secuencialidad entre 0000 y 9999. Lo que nos da la opción de invocar el TPV 10.000 veces por día:
yyyyMMdd0000
(año + mes + día + número secuencial entre 0000 y 9999)
Podemos utilizar la clase DateTime de C#
De esta forma tenemos una manera sencilla de ordenar y filtrar los números de pedido. Los BackOffice para gestión de pagos, incluído el de Redsys, realizan búsquedas entre fechas.
Se recomienda mantener los números de pedido que se vayan generando almacenados en una única tabla de SQL Server. Se puede mapear esa tabla en un esquema *.edmx para poder manejar los datos de forma cómoda con Entity Framework. Además podemos aplicar Linq para las consultas, filtrados y ordenaciones de datos.
La secuencialidad de los números de pedido se debe controlar desde una tabla de Base de Datos. De manera que el primer merchant code que se genere al empezar el día tendrá la secuencia "0000".
¿Son suficientes 10.000 números de secuencia para 1 día? En principio SI. Quizá para Amazon/Aliexpress/eBay no sirva, pero es muy complicado que un ecommerce o negocio online genere al día tantas peticiones a un TPV.
El estándar internacional ISO 4217 es el que utiliza Redsys para definir los códigos de las monedas.
Al parámetro DS_MERCHANT_CURRENCY hay que asignarle un código numérico de tres caracteres.
Las monedas más utilizadas en el TPV de Redsys y sus códigos son:
| EUR: 978 | Euro
| USD: 840 | Dólar de Estados Unidos
| GBP: 826 | Libra Esterlina
Según esto, en la mayoría de los casos utilizaremos:
· DS_MERCHANT_CURRENCY = "978"
La variable DS_MERCHANT_AMOUNT es un String. Para los euros los dos últimos dígitos se consideran la parte decimal:
Importante: Cuando llamamos a Redsys para poner el TPV en producción es obligatorio realizar un pago real.
El pago mínimo que normalmente admite Redsys es de 1€. Se codifica así:
· DS_MERCHANT_AMOUNT = "100"
En el anexo 8.1 encontramos todos los tipos de transacciones.
Próximanente publicaremos un tutorial para hacer un BackOffice que nos permita monitorizar los pagos en tiempo real.
· DS_MERCHANT_TRANSACTIONTYPE = "0" | Operativa de pago normal
· DS_MERCHANT_TRANSACTIONTYPE = "3" | Utilizado en consultas SOAP para consultar pagos devueltos.
La variable DS_MERCHANT_TRANSACTIONTYPE tendrá el valor "0" para operaciones de pago convencionales.
La variable DS_MERCHANT_TRANSACTIONTYPE normalmente es 001.
· DS_MERCHANT_TRANSACTIONTYPE = "001"
Siempre es 001 salvo que el banco diga lo contrario.
La URL de producción tiene que ser PÚBLICA
Puede parecer obvio, pero cuando llamemos al Servicio Técnico de Redsys (902 106 223) para pedir el paso del TPV a producción se deben seguir una serie de pasos:
1. Redsys tiene un departamento de prevención de blanqueo de capitales. Van a comprobar que el ecommerce asociado a la URL pública es un negocio lícito.
2. Redsys habilita el TPV de producción.
3. Hay que realizar un pago en real, al menos de 1€.
4. Solicitamos a Redsys que habilite el entorno de TEST para realizar la integración.
Es la URL de retorno (a nuestra web) a la que la pasarela nos redirige cuando el pago efectuado se ha realizado de forma correcta.
Es la URL de retorno (a nuestra web) a la que la pasarela nos redirige cuando el pago efectuado se ha realizado de forma incorrecta.
En un proyecto MVC tenemos dos opciones para crear un formulario web:
1. Con un archivo html convencional.
2. Con un archivo cshtml para Razor.
Recomendamos utilizar la opción 2.
Un archivo cshtml es más adecuado para una solución MVC y nos da la flexibilidad de utilizar código C# si fuese necesario.
Crear la vista sin modelo, tal y como se indica en la imagen:
Antes de explicar como crear el formulario, te puedes descargar el formulario cshtml de este ejemplo en el enlace:
Para conectarse por redirección con la pasarela de pago de Redsys hay que enviar realizar el submit de un formulario con los siguientes parámetros:
1. Ds_SignatureVersion
2. Ds_MerchantParameters
3. Ds_Signature
Mediante el submit del formulario se envía un Request de tipo POST a la siguiente URL (en función del entorno):
URL TEST: https://sis-t.redsys.es:25443/sis/realizarPago
URL LIVE: https://sis.redsys.es/sis/realizarPago
En las AppSettings del web.config podemos definir las URL para cada entorno:
Utilizando el motor de vistas Razor, podemos utilizar las AppSettings del web.config directamente sobre el formulario web:
Para evitar que el formulario se vea sobre el navegador se tienen que tomar dos medidas:
1. Utilizar jQuery para realizar un auto-submit:
2. Utilizar input's de tipo hidden:
En el punto 3.5.3 del Manual de Redsys se indica que también es necesario el uso de la librería Newtonsoft.Json.
Si trabajamos en MVC por defecto vamos a encontrar la librería Newtonsoft.Json integrada:
ASP.NET permite incluir en nuestras soluciones proyectos de tipo WebApi.
Para este tipo de Web Service (de tipo REST) se necesita enviar los datos serializados en formato JSON a través del protocolo http.
902 106 223 | 91 121 92 50
Como ya sabemos el TPV de Redsys debe invocarse siempre con un número de pedido distinto.
El error 9051 se produce cuando se invoca el TPV con un número de pedido repetido.
¿Cómo puede ocurrir esto?
Dentro de la pasarela, en la pantalla en la que se introduce el número de tarjeta, hay que evitar hacer F5.
Si una vez iniciado el funnel de compra, volvemos hacia atrás utilizando las flechas del navegador, podríamos generar un error 9051.
Ingeniero en Informática | Arquitecto .NET
Experto en Desarrollo Web y consultoría SEO.
miguel@amgrafic.com
91 527 86 97
Diccionario SEO con todos los términos necesarios para optimizar y posicionar tu web.
Elegir una agencia SEO es muy importante para el éxito de tu proyecto. Te lo contamos en este artículo.