¡Hola Víctor! 🙌
Ese error de Stripe (“The provided PaymentMethod cannot be attached. To reuse a PaymentMethod, you must attach it to a Customer first”) aparece cuando WooCommerce intenta reutilizar un método de pago (para membresías/suscripciones o “guardar tarjeta”) pero ese PaymentMethod no está adjuntado a un Customer en Stripe o pertenece a otro modo/cuenta.
Ve paso a paso (orden recomendado):
-
Claves y modo en vivo
-
En WooCommerce → Pagos → Stripe, confirma que Test Mode está desactivado y que las LIVE keys (Publishable + Secret) son las correctas (sin espacios/copias duplicadas).
-
En el panel de Stripe, verifica que estás en Live (no Test) cuando revises logs.
-
Webhooks en vivo
-
En Stripe Developers → Webhooks, crea (o edita) el endpoint en modo Live para tu dominio y copia el Signing secret en WooCommerce (Stripe settings).
-
Sin webhooks correctos, Stripe/Woo no completa la creación de Customer/SetupIntent y salen errores raros.
-
Guardar tarjeta / crear Customer
-
En WooCommerce → Pagos → Stripe, activa “Save payment methods / Enable Payment via saved cards” (o “Payment Element” con guardar método).
-
Esto fuerza a Woo a crear el Customer en Stripe y adjuntar el PaymentMethod al Customer antes de reutilizarlo (clave para BuddyBoss + membresías).
-
Borra métodos guardados “incompatibles”
-
En tu sitio, entra al perfil del usuario de prueba (Mi cuenta → Métodos de pago) y elimina tarjetas/métodos guardados.
-
Vuelve a pagar con una tarjeta nueva en modo Live (no las de prueba).
-
Si el usuario ya intentó en test y luego Live, a veces quedan tokens de test guardados: eliminarlos evita el choque.
-
Actualiza todo y prueba “sin guardar”
-
Actualiza WooCommerce, WooCommerce Stripe Gateway y cualquier plugin de membresías/suscripciones.
-
Como prueba, desactiva temporalmente la opción de guardar tarjeta y haz un cobro one-time. Si pasa, el problema estaba en la fase de adjuntar el PM al Customer.
-
Revisa los logs de Stripe (pista definitiva)
-
Stripe → Developers → Logs (modo Live). Abre la solicitud fallida y mira el error code y el request_id.
-
Si ves “resource_missing / customer” o similar, confirma que Woo está enviando customer al crear el PaymentIntent/SetupIntent (se arregla con el punto 3).
-
Cosas que también pueden romperlo
-
Cuenta Stripe Live mal verificada o moneda no admitida.
-
Plugins de caché/seguridad bloqueando la llamada del Payment Element o del webhook. Prueba en modo incógnito y desactiva caché durante las pruebas.
-
Dominio distinto entre checkout y el configurado en Stripe (subdominio vs dominio).
Si tras esto sigue igual, también puedes abrir chat con Stripe Support y darles el request_id: en 2 min te confirman si el PM estaba en otro modo/cuenta o sin Customer adjunto.
¡Ánimo! Es típico al pasar de prueba a vivo; con esos ajustes queda funcionando. 💪