A veces te piden cosas muy raras, pero cada uno conoce su negocio mejor que nadie y realiza sus procesos de la forma que mejor le viene, así que la obligación del desarrollador es hacer que la web se adapte a las necesidades del negocio, y no viceversa.
Esto viene por una petición bastante rara que me hizo un cliente: quería habilitar en su web los pagos con tarjeta pero para procesarlos offline, es decir, el cliente realiza el checkout dando los datos de la tarjeta de crédito y después él realiza el cargo a través de un TPV físico. A ver cómo narices hacemos esto en WooCommerce.
Tabla de contenidos
Pedir y almacenar los datos de la tarjeta
Ya sé que no es muy eficiente en términos de tiempo pero, cuando un cliente me pide una funcionalidad fuera de lo habitual, normalmente prefiero programarla a medida para su web. Al fin y al cabo es difícil encontrar una solución comercial (gratuita o de pago) que se adapte bien a necesidades especiales, y la experiencia me ha enseñado que a menudo tardo menos en programarla que en ponerme a buscar una solución «enlatada», que al final será poco eficiente porque requerirá de varios plugins trabajando en conjunción.
Así que cuando este cliente me hizo esta petición mi primer pensamiento fue programar una pasarela de pago para WooCommerce que se limitara a recoger los datos de la tarjeta de crédito o débito (titular, número de tarjeta, caducidad, código de seguridad), a almacenarlos y a dejar el pedido como pendiente. Fácil, fácil.
Estándar de Seguridad de Datos para la Industria de Tarjeta de Pago
Pero la cosa es diferente cuando, después, uno se sienta a escribir código. Dejando a un lado el tema de las comprobaciones de números y tipos de tarjeta (tedioso pero sencillo de programar) lo primero que viene a la mente es… ¡la seguridad!
Porque imagina que alguien consigue acceso a la web o al servidor. Todos esos pedidos con los datos de los clientes (nombre, dirección, teléfono) asociados a los de una tarjeta bancaria… ¡Eso no puede ser!
Y claro, efectivamente no puede ser. De hecho los requisitos para almacenar datos de tarjetas bancarias están regulados por una normativa llamada PCI DSS (Payment Card Industry Data Security Standard, es decir, Estándar de Seguridad de Datos para la Industria de Tarjeta de Pago).
Como ya te imaginas, los requisitos son bastante duros y las multas por saltárselos a la torera bastante altas. Así que, ¿qué toca? Encriptación asimétrica, múltiples factores de autenticación… Espera, espera, ¿no nos estamos complicando la vida demasiado?
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Pedir los datos de la tarjeta en el checkout, pero no realizar el cargo
Pues toca lo que quería evitar hacer: buscar una solución comercial a una necesidad tan específica. Y resulta que me encuentro con que no es tan específica, y que hay soluciones realmente ingeniosas por ahí para evitar (de forma legal, legítima y fiable) todos esos requisitos de seguridad.
De hecho hay varios, pero te mostraré dos por ser los más representativos. Y, por cierto, uno de ellos se adaptaba realmente bien a la necesidad de este cliente, así que opté por no invertir horas de programación cuando el trabajo ya estaba (bien) hecho.
WooCommerce Offline Credit Card Payment Method
El primero de ellos es WooCommerce Offline Credit Card Payment Method (plugin retirado). No te puedo dar referencias sobre cómo funciona, porque no lo he utilizado: no me termina de convencer el procedimiento que utiliza.
Básicamente el plugin encripta los datos de la tarjeta utilizando una clave que el cliente establece en el checkout y que luego debe hacer llegar al gestor de la tienda por algún otro método (email, teléfono), de forma que éste pueda utilizarla para desencriptar dichos datos.
WooCommerce Offline Credit Card Processing
Finalmente opté por este otro plugin, WooCommerce Offline Credit Card Processing, que utiliza un método mucho más ingenioso.
Básicamente el plugin recoge todos los datos de la tarjeta de crédito, pero guarda sólo una parte (los cuatro primeros y los cuatro últimos números) junto con los datos del pedido en WooCommerce. El resto (los doce números centrales) los envía por email al administrador, con la indicación de eliminar el correo una vez se haya procesado el pago.
Como ves no hay encriptación, con lo que se obvia el paso de establecer (y transmitir) una clave, pero igualmente se cumplen los estándares PCI ya que no se almacenan los datos de la tarjeta en el servidor. Obviamente hay que evitar utilizar plugins como Email Log, que guardan copia de todos los emails enviados por WordPress.
Por otro lado, las opciones del plugin permiten un grado de libertad suficiente a la hora de configurarlo:
- Nombre y descripción del método de pago, e icono personalizado en caso de quererlo
- Solicitar o no el nombre del titular
- Aceptar todos los tipos de tarjeta o especificar los que quieren aceptarse
- Pasarse el PCI DSS por el arco del triunfo
- Dirección para enviar los datos adicionales, si mandarlos o no, y personalización del texto del correo, con una gran cantidad de variables a incluir en él
- Estado en que debe quedar el pedido
- Algunas otras opciones
En fin, como ves, una solución muy ingeniosa a un problema que, en principio, parecía bastante engorroso. Se agradece.
Deja una respuesta