Enrique J. Ros

Gravity Forms y Redsys: cobros con tarjeta según un formulario

Gravity Forms, no me canso de decirlo, es el mejor plugin de formularios para WordPress, sin lugar a dudas. Incluso permite recibir pagos, estableciendo la cantidad a pagar en función de la selección hecha en un formulario. Pues bien, vamos a ver cómo generar un pago con Redsys desde un formulario de Gravity Forms.

Porque, a día de hoy, Gravity Forms no dispone de un add-on oficial para el pago con tarjeta del sistema Redsys (los add-ons oficiales disponibles para esto se limitan a pagos mediante PayPal y Stripe), pero eso no quiere decir que no se pueda hacer. Veamos cómo.

Generar un pago a través de un formulario con Gravity Forms

Una de las características más interesantes de Gravity Forms es que permite asignar valores a los campos, incluyendo el asignar valores distintos a las diferentes opciones de un selector o un grupo de casillas. Es más, permite realizar operaciones con estos valores para generar un resultado final.

Eso permite calcular dinámicamente cantidades de pago dentro de un formulario, en función de los campos y selecciones rellenados por el usuario. Voy a poner un ejemplo que además usaré para después implementarlo, creo que es la forma más fácil de visualizar la importancia de esta funcionalidad.

Recuerda que puedes descargar gratuitamente Gravity Forms, periódicamente actualizado, desde el área de suscriptores de la web si estás suscrito a los plugins (+info)

Cobro de una reserva con Gravity Forms

Pongamos por caso (por poner un ejemplo de entre las múltiples aplicaciones posibles) que tienes una web de actividades de montaña, bastante sencilla, sin ecommerce; pero quieres poder cobrar online las actividades (o las reservas) a tus clientes.

Tienes varias opciones para ello:

Pero el problema es que ninguno de estos sistemas permite generar la cantidad a pagar de forma dinámica y en tiempo real en función de una serie de opciones. Y ahí es donde entra Gravity Forms.

Generar la cantidad a pagar mediante un formulario

La idea es presentar al usuario un formulario creado con Gravity Forms que permita seleccionar al usuario las opciones que quiere y que sea el propio formulario el que calcule la cantidad a pagar en función de estas opciones, y genere el pago en tiempo real.

Pues, como decía más arriba, se puede. Gravity Forms ya tiene entre sus add-ons soluciones para implementar esto con PayPal y con Stripe.

Pero obviamente, si ya tienes un TPV de Redsys querrás usar esta última opción, ya que las comisiones son más bajas y muchas veces el banco impone una comisión extra si no se alcanza un mínimo de transacciones, por lo que lo ideal es recibir el mayor número de pagos con este sistema.

Pues bien, a pesar de que no hay un add-on de Gravity Forms para Redsys, podemos hacerlo, y vamos a ver cómo. Siguiendo con nuestro ejemplo, digamos que en nuestra web de actividades de montaña ofrecemos algunos cursos:

Cada curso tiene, por supuesto, un precio diferente. Además, paralelamente a los cursos se pueden contratar una serie de servicios extra que aumentan el precio, como el alquiler del material de montaña, el alquiler del material de seguridad o incluir la comida.

Así que vamos a poner nuestra página de reservas online con un formulario pidiendo al cliente los datos, la selección del curso que desea realizar y los extras que quiere contratar. Gravity Forms se encargará de calcular la cantidad que tiene que pagar se generará un pago con esa cantidad y todos los detalles.

Veamos cómo hacer esto. Si lo prefieres, al final tienes un vídeo donde podrás verlo paso a paso siguiendo nuestro ejemplo.

Pago mediante Redsys según el precio calculado por Gravity Forms

Para esto vamos a usar éste plugin que nos permite insertar un botón de pago mediante Redsys:

Entre otras funcionalidades, este plugin permite recibir los datos (cantidad a pagar, concepto y otros adicionales) mediante la URL, datos que el plugin recibe y utiliza para generar un botón con el pago ya configurado (los datos, aunque se reciban mediante la URL, no quedan visibles). Esto permite enviar al cliente un enlace que ya incluya la información del pago.

Por su parte, Gravity Forms permite enviar los datos recogidos por el formulario a otra URL a través de una serie de parámetros. Esto permite, entre otras cosas y como ya expliqué en su momento, enviar datos de un formulario a otro:

Pues bien, se trata de utilizar estas funcionalidades de ambos plugins para, haciéndolas trabajar en conjunto, hacer que Gravity Forms calcule la cantidad y notifique al botón de Redsys qué opciones ha seleccionado el usuario y cuánto tiene que pagar por ellas.

El plugin del botón Redsys registrará las opciones, generará el pago con TPV y enviará notificaciones con todos los detalles cuando éste se haya completado. Y es más sencillo de lo que parece.

Calcular el precio con Gravity Forms

Lo primero es, como no, crear nuestro formulario. Tenemos, cómo no, que solicitar del usuario los datos personales que necesitemos de él, pero también tenemos que crear las opciones que influirán en la cantidad a pagar (en nuestro ejemplo, los cursos y los extras) y asignarles un precio.

Por último, diremos a Gravity Forms cómo calcular el precio final en función de las opciones seleccionadas (para ello podemos realizar operaciones matemáticas) y qué tiene que hacer con todos los datos.

Para dar forma a nuestro ejemplo, tendremos:

Asignando precios a las opciones en Gravity Forms

La parte de asignar a cada opción su precio es bastante sencilla, ya que los campos tienen una opción llamada Mostrar valores que nos permitirá asignarlo:

Por último, tendremos que crear un campo númerico oculto que será el que almacene el precio final. En este campo debemos habilitar el cálculo, utilizando una fórmula: (curso + extras) * número de personas.

Sólo hay que tener una precaución: las diferentes opciones de un mismo campo (como los cursos o los extras en nuestro ejemplo) han de tener precios diferentes. Si se asigna el mismo valor a dos o más de ellos Gravity Forms se lía a la hora de pasar los datos, ya que el mismo valor significa para él la misma opción.

Pagar con Redsys en función de las opciones del formulario

Por último, sólo queda enviarlo toda la información al plugin de pago con Redsys. Para ello usaremos la funcionalidad de confirmaciones de Gravity Forms (Formulario > Ajustes > Confirmaciones), y cambiaremos el tipo de confirmación de Texto a Página. Sólo falta seleccionar la página, que habremos creado para ello, que contenga el shortcode del plugin de pagos con Redsys.

También hay que activar la opción Pasar datos de los campos via Query String, y mediante ella pasaremos al shortcode de pagos con Redsys todas las opciones: la cantidad (indicada con cant), el concepto, los datos del usuario y sus selecciones.

Si no sabes cómo hacerlo, puedes echar un vistazo a la entrada que te enlazaba más arriba sobre cómo pasar datos entre formularios o, mejor aún, echarle un vistazo al vídeo de aquí abajo, donde lo verás claramente.

El resultado es que el plugin de pagos con Redsys:

  1. Genera un botón de pago mediante TPV Redsys de la cantidad según las opciones seleccionadas
  2. Muestra el texto con todo lo seleccionado por el cliente y lo envía también a Redsys
  3. Registra la operación, incluyendo cantidad, opciones elegidas, fecha, hora, número de autorización…
  4. Envía notificaciones por email (personalizables) al administrador y/o al cliente informándole de la reserva, el pago, las opciones y todos los datos

Vídeo: pagos con Redsys generados por un formulario con Gravity Forms

Como una imagen vale más que mil palabras (mil trescientas en el caso de esta entrada) y como seguro que lo ves mucho más claro en un vídeo, donde puedo ir más al detalle, no se diga más, aquí te dejo con uno del proceso, paso a paso:

Salir de la versión móvil