Un cliente llega al pago, el botón se queda cargando, aparece un error o el pedido queda pendiente sin que la venta se complete. Si revisas solo AJAX, puedes pasar por alto la causa: el checkout clásico depende principalmente de ese flujo, mientras que Checkout Blocks utiliza la Store API. Cambiar plugins, caché o pasarela sin distinguirlos puede convertir un incidente puntual en más ventas perdidas.
Los problemas de checkout suelen deberse a conflictos de JavaScript, caché, Store API o comunicación con la pasarela, no al formulario en sí. Clasifica primero el síntoma y el tipo de checkout; después comprueba consola, peticiones de Network y logs. Hazlo en staging y con una copia de seguridad antes de intervenir en producción.
Índice
Anuncio
Diagnostica problemas WooCommerce checkout
Clasifica el síntoma y la arquitectura antes de cambiar ajustes.
Relaciona síntoma y primera prueba
| Síntoma | Primera prueba segura | Respuesta que buscar | No hagas esto |
|---|---|---|---|
| Spinner que no termina | Network, filtro Fetch/XHR | 403, 429, 500 o JSON con error | Desactivar extensiones en producción |
| Error al procesar el pedido | Consola y log de WooCommerce | Campo inválido, PHP o credenciales | Culpar a la pasarela sin revisar el log |
| Vuelve de Redsys, Stripe o PayPal sin confirmar | Estado de pedido y callback | Redirección, webhook o firma fallida | Marcar pedidos como pagados a mano |
| Pedido pendiente de pago | Panel de la pasarela | Transacción aprobada, rechazada o ausente | Borrar el pedido antes de comprobarlo |
Distingue AJAX de store API
Si aparece el bloque de pago de WooCommerce, se trata de Checkout Blocks; si aparece el shortcode [woocommerce_checkout], es el flujo clásico. El clásico suele lanzar ?wc-ajax=, mientras que el bloque llama a rutas REST y a la Store API. En Network, filtra Fetch/XHR, realiza una prueba de pago y guarda la URL, el código HTTP y la respuesta.
Para investigar un error de checkout, abre la consola del navegador antes de reproducir el fallo y conserva el registro de Network.
- En el checkout clásico, localiza la petición
?wc-ajax=. - En Checkout Blocks, revisa las llamadas de la Store API WooCommerce relacionadas con carrito, pago y pedido. Un código 400 suele indicar un campo obligatorio o una validación fallida.
- Un 401 o 403 puede indicar sesión caducada, nonce inválido o bloqueo del WAF.
- Un 429 apunta a limitación de solicitudes, y un 500 requiere contrastar la respuesta con el log de PHP y los logs de WooCommerce.
Si Network devuelve 200 pero la interfaz muestra un error, revisa la consola para detectar una excepción que impida procesar la respuesta.
Aísla caché, código y pasarela
Excluye las páginas transaccionales y localiza la capa que modifica la petición.
Revisa caché, CDN y firewall
Comprueba el plugin de caché, CDN y firewall. Excluye /cart/, /checkout/ y /my-account/, sus slugs traducidos y las cookies woocommerce_items_in_cart, woocommerce_cart_hash y wp_woocommerce_session_. Un 403 suele apuntar al WAF; un 429, a límites de peticiones.
Comprueba tema, campos y actualizaciones
Valida credenciales y autenticación
Tras validar las credenciales y la autenticación, si el checkout WooCommerce no funciona después de una actualización, aísla el conflicto en staging con una prueba controlada. Desactiva primero los plugins que modifican campos, precios, envíos, consentimiento, moneda, pagos o scripts, y repite la compra tras cada cambio para identificar el responsable. Si el problema continúa, cambia temporalmente a un tema predeterminado de WordPress y desactiva la combinación, minificación o aplazamiento de JavaScript. Los errores JavaScript checkout suelen aparecer cuando un script elimina eventos de WooCommerce, altera los datos del formulario o carga tarde una dependencia.
No basta con que desaparezca el spinner de pago WooCommerce: valida también que se crea el pedido, se registra el pago y llega el correo.
Anuncio
Comprueba cobros, webhooks y pruebas seguras
Verifica el recorrido completo del dinero antes de cambiar estados de pedido.
Revisa pedidos y webhooks
En WooCommerce, abre el pedido y consulta sus notas. Después entra en WooCommerce > Estado > Registros y selecciona el archivo de la pasarela por fecha y hora. Busca firma inválida, URL no accesible, credenciales erróneas, timeout o respuestas 401, 403 y 500; compara pedido, importe, moneda y hora con la operación real.
Haz cambios en staging con rollback
- Comprueba en staging el pago con tarjeta y un método alternativo, si existe.
- Prueba en móvil con Wi-Fi y datos móviles, porque algunas redirecciones fallan solo en una red.
- Confirma que el pedido cambia de estado y que llegan notas, correo y webhook.
- Guarda el ajuste anterior para poder revertirlo en menos de 5 minutos.
Ante un pago aprobado que deja un pedido pendiente, confirma primero si la pasarela recibió la operación y qué identificador de transacción le asignó. Después compara ese identificador, importe, moneda y hora con las notas del pedido y el registro del plugin de pago. Revisa en el panel de la pasarela los intentos de entrega del webhook de pago o del callback de pasarela, incluida la URL llamada, la respuesta HTTP y los reintentos.
Una respuesta 404, 401, 403 o 500 impide que WooCommerce actualice el estado aunque el banco haya cobrado. Si usas HPOS, comprueba que la extensión de la pasarela declara compatibilidad y está actualizada antes de atribuir el fallo al webhook o cambiar manualmente el pedido.
Lo que más preguntan
¿Por qué falla el checkout de WooCommerce?
El pago suele fallar por caché, JavaScript, campos inválidos, pasarela o un bloqueo del servidor. Distingue primero el checkout clásico con AJAX de Checkout Blocks con Store API. Esa diferencia decide qué llamada debes revisar en Network.
¿Por qué se queda cargando el pago?
Un spinner infinito suele corresponder a una petición bloqueada, lenta o con error HTTP 403, 429 o 500. Abre F12, filtra Fetch/XHR y revisa la respuesta de la última petición. Excluye el checkout de caché y JavaScript diferido antes de cambiar plugins.
¿Qué páginas de WooCommerce no debo cachear?
Carrito, mi cuenta y finalizar compra deben quedar fuera de caché de página, CDN y scripts diferidos agresivos. Respeta también las cookies de sesión de WooCommerce. Sin esas exclusiones, el carrito puede variar entre visitas.
¿Por qué hay un pago cobrado sin pedido?
Un pago cobrado sin pedido suele indicar un webhook o callback bloqueado, fallido o no compatible con HPOS. Compara hora e importe en la pasarela, las notas del pedido y los logs. No devuelvas ni marques cobros manualmente sin esa conciliación.
¿Cómo veo los errores de WooCommerce?
Los errores se consultan en WooCommerce > Estado > Registros y en la consola del navegador. Activa WP_DEBUG_LOG solo de forma temporal y sin mostrar errores al público. Un log de PHP complementa la respuesta de Network, no la sustituye.
- Clasifica el síntoma antes de cambiar ajustes, porque spinner, redirección y pedido pendiente siguen rutas distintas.
- Comprueba si el pago usa AJAX clásico o Store API para inspeccionar la petición correcta.
- Protege carrito, cuenta y checkout con exclusiones permanentes de caché, CDN, WAF y JavaScript diferido.
- Conciliar pasarela, webhook, pedido y logs evita confundir un cobro válido con un error técnico.
Cierra la incidencia con una prueba real
Documenta la causa y valida una compra controlada antes de cerrar el incidente. Anota el ajuste aplicado, la petición que fallaba, su código HTTP y el resultado. Confirma navegador, pedido, cobro, webhook y correo en la misma operación; si uno no coincide, la incidencia sigue abierta.
- Configurar mal Redis o Memcached rompe tu carrito
- El error de usar Elementor en toda tu tienda grande
Josu Barrios
Somos especialistas en mantenimiento WordPress para empresas, profesionales y tiendas online. Contamos con experiencia en seguridad web, optimización de rendimiento, actualizaciones, copias de seguridad y resolución de incidencias técnicas, ayudando a que cada sitio funcione de forma rápida, estable y protegida. Nuestro enfoque combina soporte técnico profesional, buenas prácticas de seguridad y seguimiento continuo para ofrecer un servicio fiable, transparente y orientado a resultados reales.