Antes de nada, un poco de historia y teoría, ya que creo que es importante para entenderlo todo.
Últimamente muchos clientes del plugin de modulosdepago.es en su versión PRO, la que en si acepta la tokenización de tarjetas y los pagos recurrentes con WooCommerce Subscriptions, están migrando a mi plugin de WooCommerce.com
El problema que tienen básicamente es que las suscripciones creadas con anterioridad no se cargan, es decir, no pueden cobrarse. Hasta aquí todo normal, ya que cuando WooCommerce guarda las tarjetas tokenizadas, las guarda para un Gateway ID en particular, y mi plugin de pasarela no debería tener acceso a esos tokens si el ID es diferente.
Básicamente, cuando WooCommerce guarda mediante su API las tarjetas, las guarda en dos tablas
En la tabla woocommerce_payment_tokens
Aquí es dónde guarda los tokens en si.
y la tabla woocommerce_payments_tokensmeta
es donde guarda todos los datos relacionados con esas tarjetas.
Bien, podéis ver que en la tabla woocommerce_payment_tokens que hay una columna que pone gateway_id, En esta columna WooCommerce guarda el ID del Gateway. Si el plugin de modulosdepago.es se hubiera desarrollado utilizando la API de WooCommerce, aquí se encontrarían todos los tokens de los usuarios y no habría que hacer nada más, ya que por suerte, tanto el gateway_id de modulosdepago.es como el de WooCommerce.com son iguales. Así que sería una migración totalmente transparente.
Como comento, la extensión de modulosdepago.es no se ha desarrollado siguiendo los estándares de WooCommerce, y no se ha utilizando la API de Tokenización. Esto me ha obligado a crear un script para que todos los usuarios que quieran empezar a disfrutar de todas las ventajas del plugin oficial de WooCommerce.com para Redsys, lo puedan hacer sin problemas.
¿Qué es lo que hace la extensión de modulosdepago.es? pues es bien sencillo, en vez de utilizar la API de tokenización, guarda el token con los metadatos de los usuarios.
Exactamente lo que hace es guardarlo en los metas _ds_merchant_identifier y redsys_card de los usuarios en la table {prefijo_}usermeta
Esta forma «funciona», pero tiene consecuencias, cómo que la tarjetas no las pueda gestionar el usuario desde su cuenta de WooCommerce, o que WooCommerce no sepa cosas tan básicas como la fecha de caducidad. Cómo veréis, no es la forma mas idónea de hacerlo, sobre todo cuando existe una API específica para ello.
En qué consiste mi script, pues simplemente lo que hace es ir por todos los usuarios buscando estos dos datos, y añadirlos de forma correcta a WooCommerce mediante su API de Tokenización. De esta forma, los usuarios ya pueden gestionar por ejemplo sus tarjetas desde sus cuentas.
En este caso, el script debe añadir datos falsos, como es por ejemplo la fecha de caducidad, que la fija en diciembre de 2022, o el tipo de tarjeta que la pone como unknown, por el mero hecho que estos datos no son guardados por el plugin de modulosdeoago.es. y por lo tanto no se pueden añadir a la API de WooCommerce (el de WooCommerce.com los guarda todos).
Una vez que el proceso acaba, ya todo funciona con normalidad, todos los usuarios tienen acceso a sus tarjetas, y WooCommerce es capaz de gestionarlas (cosa muy importante como es lógico).
Antes de continuar NO utilicéis este script si vais a continuar con el plugin de modulosdepago.es. No os servirá de nada ya que el plugin seguirá guardando los datos y utilizándolo de su forma. Este script solo vale la pena utilizarlo si queréis empezar a utilizar el plugin oficial de WooCommerce.com para Redsys que utiliza la API de WooCommerce.
¿Cómo se utliza el script?
Es muy sencillo, solo debéis subir un archivo con el nombre que deseéis, por ejemplo update-tokens.php al directorio raíz de vuestra instalación. Una vez subido, solo debéis visitar la dirección https://tusitio.tld/update-tokens.php y el script se pondrá en marcha. Si cuando acaba no sale el mensaje «¡Felicidades! Todos los Tokens de los usuarios migrados», recarga la página hasta que salga. Esto puede ser debido a que por ejemplo tengas muchos usuarios y se produzcan timeouts.
Por favor, realiza una copia de seguridad antes de proceder con el script. Por el tipo de funcionamiento que tiene, no debería pasar absolutamente nada, pero cuando se juega con la base de datos, siempre es bueno hacer una copia de seguridad antes de comenzar.
El código que debe tener el archivo a subir es:
Recuerda que si estás realizando esta migración, y tienes un problema, puedes abrir un ticket para que te ayude en WooCommerce.com
También recuerda que mi plugin está auditado constantemente por Automattic (desarrolladores de WooCommerce) y sigue estrictamente todos los estándares de WordPress, WooCommerce y utiliza siempre la API de WooCommerce. Nunca tendrás problemas de compatibilidad y todo el código sigue los Coding Standards de WordPress VIP, los más exigentes en cuanto a calidad de código en el mundo de WordPress.