Tutorial para integrar el TPV de Redsys en .NET

 En este tutorial te contamos paso a paso como integrar el TPV de Redsys en aplicaciones web de Microsoft .NET

Importar librería RedsysAPI.dll desde la web de Redsys

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:

Integrar TPV Redsys .NET

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.

Integrar TPV Redsys .NET 2

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:

Integrar TPV Redsys .NET 4

Instalar el paquete RedsysTPV desde el NuGet de Visual Studio

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:

Integrar TPV Redsys .NET 3

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:

Integrar TPV Redsys .NET 5

2. Redsys Manual TPV Virtual

El manual original para la integración del TPV de Redsys por Redirección podéis descargarlo pulsando sobre el enlace:

Descargar Manual Redsys   

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.

3. Qué significa integrar un TPV por Redirección

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:

Integrar TPV Redsys .NET 6

4. DS_MERCHANT_MERCHANTCODE: Código de Comercio

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

5. DS_MERCHANT_ORDER: Número de Pedido

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.

5.1. Cómo calcular el DS_MERCHANT_ORDER

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:

Integrar TPV Redsys .NET 7

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#

Integrar TPV Redsys .NET 8

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.

6. DS_MERCHANT_CURRENCY: Moneda para el pago

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"

7. DS_MERCHANT_AMOUNT: Importe de pago

La variable DS_MERCHANT_AMOUNT es un String. Para los euros los dos últimos dígitos se consideran la parte decimal:

Integrar TPV Redsys .NET 9

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"

8. DS_MERCHANT_TRANSACTIONTYPE: Tipo de Transacción

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.

Integrar TPV Redsys .NET 18

La variable DS_MERCHANT_TRANSACTIONTYPE tendrá el valor "0" para operaciones de pago convencionales.

9. DS_MERCHANT_TERMINAL: Terminal

La variable DS_MERCHANT_TRANSACTIONTYPE normalmente es 001.

· DS_MERCHANT_TRANSACTIONTYPE = "001"

Siempre es 001 salvo que el banco diga lo contrario.

10. DS_MERCHANT_URL: URL pública del ecommerce

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.

11. DS_MERCHANT_URLOK: URL de salida para Pago Correcto

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.

12. DS_MERCHANT_URLKO: URL de salida para Pago Incorrecto

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.

13. Cómo crear el Formulario para enviar la Petición al TPV Virtual

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:

Integrar TPV Redsys .NET 12

Antes de explicar como crear el formulario, te puedes descargar el formulario cshtml de este ejemplo en el enlace:

Descargar Formulario Redsys   

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:

Integrar TPV Redsys .NET 13

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:

Integrar TPV Redsys .NET 15

Utilizando el motor de vistas Razor, podemos utilizar las AppSettings del web.config directamente sobre el formulario web:

Integrar TPV Redsys .NET 14

Para evitar que el formulario se vea sobre el navegador se tienen que tomar dos medidas:

1. Utilizar jQuery para realizar un auto-submit:

Integrar TPV Redsys .NET 16

2. Utilizar input's de tipo hidden:

Integrar TPV Redsys .NET 17

Qué es Newtonsoft.Json

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:

Integrar TPV Redsys .NET 10

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.

Integrar TPV Redsys .NET 11

Teléfono Redsys TPV Virtual

 902 106 223 | 91 121 92 50

TPV Redsys Error 9051

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.

Miguel

Ingeniero en Informática | Arquitecto .NET

Experto en Desarrollo Web y consultoría SEO.

  miguel@amgrafic.com
  91 527 86 97

Sigue aprendiendo con nuestro Blog de SEO

Diccionario SEO

Diccionario SEO

Diccionario SEO con todos los términos necesarios para optimizar y posicionar tu web.

Como elegir agencia SEO

Cómo elegir agencia SEO

Elegir una agencia SEO es muy importante para el éxito de tu proyecto. Te lo contamos en este artículo.

Scrum y SEO

Evitar el SEO barato y porqué no funciona

El SEO barato no funciona y no va a funcionar.