Contactar

Mantenimiento WordPress
Mantenimiento WordPress
  • Inicio
  • Actualizaciones
  • Blog
  • Copias de seguridad
  • Errores y problemas
  • Hosting
  • Hosting técnico
  • Mantenimiento servicio
  • Migración
  • Noticias
  • Noticias de WordPress
  • Optimización y velocidad
  • Rendimiento
  • Seguridad
  • Seguridad avanzada
  • Nosotros
  • Contactar
Buscar
  • Inicio
  • Actualizaciones
  • Blog
  • Copias de seguridad
  • Errores y problemas
  • Hosting
  • Hosting técnico
  • Mantenimiento servicio
  • Migración
  • Noticias
  • Noticias de WordPress
  • Optimización y velocidad
  • Rendimiento
  • Seguridad
  • Seguridad avanzada
  • Nosotros
  • Contactar

Recupera pagos en WooCommerce bloqueados por caché

Imagen relacionada con recupera pagos en

¿Pagos fallando en horas punta sin patrón claro? Tiendas WooCommerce con plugins de caché o CDN suelen servir checkout estático, rompiendo nonces, cookies y fragmentos de carrito. Con pasos rápidos y comandos reproducibles se obtiene un diagnóstico fiable y un bypass temporal que restaura conversiones mientras se depura la causa.

Errores de caché en pagos: si el proceso de pago falla por caché, primero se debe purgar cachés (plugin, CDN y navegador) y excluir páginas críticas (checkout, carrito, mi-cuenta) y cabeceras que gestionan nonces y cookies. Revisar logs, cabeceras HTTP (Cache-Control, Vary, Set-Cookie) y reglas Nginx/htaccess; seguir el checklist para aislar CDN, plugin o servidor.

Índice

    Anuncio

    Resumen del proceso: recuperar pagos en 15 minutos

    Sigue estos pasos en orden y en menos de 15 minutos tendrás un diagnóstico claro y un bypass temporal activo.
    1) Reproduce el fallo y toma cabeceras con curl.
    2) Desactiva/bypassea caché en CDN y plugin.
    3) Verifica logs y pasarela; aplica reglas de servidor.
    4) Purga por URL en el CDN y prueba en sandbox.
    5) Aplica reglas definitivas en Nginx/htaccess y revisa cookies/Vary.

    La comprobación que más rápidamente confirma origen es: si la cabecera CF-Cache-Status o X-Cache indica HIT y Age>0, la respuesta vino del borde y no del origin.

    Imagen relacionada con recupera pagos en

    Paso 1: diagnostica origen y cabeceras

    Toma evidencia inmediata con curl y decide si el origen del fallo es CDN, plugin o servidor en menos de 10 minutos.
    Usa los comandos de abajo y guarda la salida para soporte.

    ¿Qué comprobar con curl?

    Ejecuta este comando con cookies que simulen un carrito activo:

    bash curl -I -H 'Cookie: woocommerce_items_in_cart=1; wp_woocommerce_session=abc' https://tudominio/checkout

    Busca estas cabeceras (cada una indica algo concreto): Cache-Control, Expires, Vary, Set-Cookie, Age, X-Cache, CF-Cache-Status.
    Si aparece X-Cache: HIT y Age>0, el borde respondió con contenido cacheado.

    ¿Qué logs abrir primero?

    Revisa PHP-FPM y error.log de WordPress para nonces o REST errors.
    Mira access.log de Nginx/Apache para comparar requests con cookie y sin cookie.
    Consulta el panel de la pasarela (Stripe/PayPal/Redsys) para ver intentos y duplicados.

    El manejo de cabeceras Vary y las cookies en la cache key es crítico para evitar servir checkout estático. Evite emitir Vary: Cookie en páginas de pago; en su lugar marque esas rutas con Cache-Control: no-store o no-cache desde el origin y configure el CDN para pasar (pass) las peticiones cuando detecte cookies de sesión (wp_woocommerce_session, woocommerce_items_in_cart). Si necesita que el CDN mantenga caché para partes públicas, use surrogate-keys o tags y defina reglas de ‘pass’ por ruta o por presencia de las cookies; por ejemplo, en Fastly VCL: if (req.url ~ "^/(checkout|cart)") { return (pass); } y en Cloudflare cree Page Rules que hagan bypass de caché cuando existan cookies en rutas dinámicas.

    También tenga presente que fragmentos de carrito y endpoints AJAX deben devolver Cache-Control: private o no-cache y un header Surrogate-Key propio (por Surrogate-Key: cart-fragment) para permitir invalidaciones granulares sin comprometer la seguridad de nonces y tokens.

    Anuncio

    Paso 2: aplica bypass en servidor y plugin

    Activa un bypass inmediato en Nginx o htaccess y desactiva temporalmente la caché del plugin para confirmar si el fallo desaparece.
    Este cambio demuestra si la caché local o la de borde causa el problema.

    ¿Qué regla poner en nginx ahora?

    Snippet para Nginx (insertar en server block):

    nginx location ~* /(checkout|cart|my-account|wc-api|wp-json/wc) { proxy_no_cache 1; proxy_cache_bypass 1; add_header Cache-Control "no-cache, no-store, must-revalidate"; }

    map $http_cookie $no_cache { default 0; ~woocommerce_items_in_cart 1; ~wp_woocommerce_session 1; } proxy_cache_bypass $no_cache;

    ¿Qué hacer en htaccess/Apache ahora?

    Añade esto en el bloque .htaccess para marcar peticiones dinámicas:

    apache RewriteCond %{REQUEST_URI} ^/(cart|checkout|my-account) [NC] RewriteRule .* - [E=NO_CACHE:1] Header set Cache-Control "no-cache, no-store, must-revalidate" env=NO_CACHE

    1 Reproducir fallo
    curl con cookie; captura cabeceras
    →
    2 Bypass temporal
    Nginx/htaccess + desactivar plugin
    →
    3 Purga CDN
    Purgar por URL / invalidación por tag

    Paso 3: configura CDN y purgas correctas

    Configura reglas en el CDN para bypass completo de las rutas de pago y purga por URL o tag desde la API del CDN.
    No confíe en la purga del plugin; el borde puede seguir sirviendo contenido.

    ¿Cómo crear una regla en cloudflare?

    Page Rule "tudominio.com/checkout" → Cache Level: Bypass.
    Usar Purge by URL via API para invalidar exactamente /checkout y /cart.

    ¿Cómo pasar en fastly o varnish?

    En Fastly, usar VCL: si req.url ~ "^/(checkout|cart|my-account)" { pass; } y purgar por surrogate-key.
    En Varnish, usar beresp.http.Cache-Control para forzar pass en rutas dinámicas.

    Opción Coste Tiempo de invalidación típico Idóneo para checkout?
    CDN (Cloudflare/Fastly) Variable; puede ser gratuito o por plan 10s–5min (por URL), invalidación global hasta 10min Sí, con bypass de rutas dinámicas
    Plugin de caché (WP) Bajo Inmediato en origen; no garantiza borde No, salvo que coopere con el CDN
    Cache en servidor (Varnish/Nginx) Medio Inmediato si se purga por URL Sí, con reglas precisas

    Para purgas y invalidaciones automáticas en el borde conviene ejecutar comandos reproducibles contra la API del CDN. Ejemplos prácticos: en Cloudflare puede invalidar por URL con curl: curl -X POST "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/purge_cache" -H "X-Auth-Email: tu@correo" -H "X-Auth-Key: TU_API_KEY" -H "Content-Type: application/json" --data '{"files":["https://tudominio/checkout","https://tudominio/cart"]}'. En Fastly es frecuente purgar por surrogate key: curl -X POST -H "Fastly-Key: $FASTLY_KEY" "https://api.fastly.com/service/$SERVICE_ID/purge/$SURROGATE_KEY" o usar la llamada de purge_all para emergencias; para purgar por URL en Fastly se puede usar: curl -X POST -H "Fastly-Key: $FASTLY_KEY" "https://api.fastly.com/purge/https:/tudominio/checkout".

    Guardar y adjuntar la respuesta JSON de la API (status, id) en el ticket ayuda a verificar que la invalidación llegó al borde. Estos ejemplos permiten purgas selectivas rápidas sin depender sólo del panel UI del CDN.

    Errores que arruinan el checkout

    Identifica y corrige estos fallos que suelen aparecer en picos de tráfico o tras despliegues.
    Evitarlos reduce cobros duplicados y reintentos fallidos.

    ¿Qué errores son los más frecuentes?

    El error más frecuente en este punto es purgar solo el plugin y no invalidar el CDN, lo que deja el borde sirviendo páginas viejas.
    Otro problema común es cachear el checkout sin excluir cookies o nonces.

    ¿Qué consecuencias provocan en pagos?

    Nonces expirados dan error al enviar el formulario y la pasarela puede abortar.
    Timeouts en el borde pueden duplicar intentos y causar cobros dobles si no hay idempotencia.

    Anuncio

    Cuándo no funciona este método

    Este plan no aplica si el fallo proviene de la pasarela, del JavaScript del tema que impide el envío, o en arquitecturas headless que gestionan caché en la API.
    En esos casos, el problema no se resuelve con reglas de cache en borde o servidor.

    Recomendación práctica: si el bypass elimina el fallo tras 10 minutos, el origen era cacheo; planifica reglas definitivas y pruebas de carga antes de la próxima campaña.

    Plantillas listas para hosting y desarrolladores

    Envía estos mensajes para ahorrar tiempo y obtener datos útiles desde el primer ticket.
    Incluye siempre las salidas de curl y capturas de cabeceras.

    ¿Qué decir al hosting?

    Asunto: Incidencia urgente, checkout devuelve contenido cacheado

    Cuerpo (pegable):

    text Hola,

    El checkout de https://tudominio está devolviendo contenido cacheado desde el borde. He adjuntado la salida de curl. CF-Cache-Status: HIT y Age: 120. Solicito bypass de /checkout y /cart en el CDN y purga por URL. También necesito revisar si existe cache en el proxy inverso (Varnish/Nginx).

    Salida curl: curl -I -H 'Cookie: woocommerce_items_in_cart=1; wp_woocommerce_session=abc' https://tudominio/checkout

    Gracias, [Nombre del responsable]

    ¿Qué pedir al desarrollador WordPress?

    Copia este mensaje:

    text Atención: tras bypass en CDN el paso de pago sigue fallando. Adjuntad logs PHP y devolved entries con nonces expirados. Revisad plugins de caché y fragments (cart fragments). Si hay reglas en functions.php que fuerzan cache, revertidlas temporalmente.

    Comandos útiles: - curl -I -H 'Cookie: woocommerce_items_in_cart=1; wp_woocommerce_session=abc' https://tudominio/checkout - tail -n 200 /var/log/php8.0-fpm.log - grep "woocommerce" /var/log/nginx/access.log | tail -n 50

    Preguntas frecuentes sobre caché y pagos

    ¿Puedo cachear el checkout para acelerar la web?

    No, el checkout no debe cachearse; contiene nonces y tokens de pago.
    Cachear checkout suele provocar nonces expirados y fallos al enviar el pago.

    ¿La purga del plugin borra el CDN?

    La purga del plugin borra solo el origen salvo que el plugin invoque la API del CDN.
    Purgar desde WP no garantiza que el borde deje de servir contenido cacheado.

    ¿Qué cabeceras indican cache en el borde?

    CF-Cache-Status, X-Cache y Age muestran si el borde respondió con caché.
    Si Age>0 y X-Cache: HIT, el contenido salió de la CDN o proxy.

    ¿Cómo evito cobros duplicados causados por caché?

    Implementar idempotency keys en la pasarela y lógica server-side para bloquear reintentos.
    Comprobar logs de la pasarela antes de reintentar cargos.

    ¿Qué cookies afectan la cache key del CDN?

    Las cookies típicas: wp_woocommerce_session, woocommerce_items_in_cart y PHPSESSID.
    La cache key debe excluir estas cookies para rutas de pago.

    ¿Qué pruebas hacer tras aplicar cambios?

    Probar un pago en modo sandbox con tarjeta de prueba y ver las cabeceras.
    Verificar CF-Cache-Status o X-Cache y comprobar que Set-Cookie aparece solo en origin.

    Anuncio

    Checklist final y recursos

    Checklist final para dejar el sistema estable tras el incidente:
    1) Verificar bypass en CDN y plugin.
    2) Implementar reglas Nginx/htaccess definitivas.
    3) Configurar purga por URL o surrogate-keys.
    4) Añadir idempotency y revisar webhooks de pasarela.
    5) Ejecutar pruebas de carga y pagos sandbox.

    Datos y referencia: PCI DSS v4.0 exige revisar los controles de pago; PSD2 con SCA ha tenido implantaciones clave en los últimos años.
    Además, WooCommerce controla gran parte del comercio online, por eso estas reglas afectan muchas tiendas.

    ⚠️ Evitar cambios permanentes en reglas de cache sin pruebas automatizadas; un ajuste mal probado puede reintroducir fallos en la próxima campaña.

    Referencias sobre PCI DSS

    Un par de recursos prácticos y ejemplos de logs aceleran el diagnóstico y la comunicación con soporte. Checklist mínimo imprimible:

    1. Reproducir fallo y capturar headers completos
    2. Bypass CDN por URL
    3. Desactivar plugin de caché
    4. Revisar access.log/PHP-FPM
    5. Purga por surrogate-key y prueba sandbox. Ejemplo de access.log que indica borde: 203.0.113.10 - - [04/Jun/2026:12:34:56 +0000] "GET /checkout HTTP/1.1" 200 4521 "-" "Mozilla/5.0" "CF-Cache-Status: HIT". Ejemplo de PHP error que aparece cuando falla nonce: [04-Jun-2026 12:34:57] PHP Warning: wp_verify_nonce: Nonce expired in /var/www/html/wp-includes/pluggable.php on line 1234. Adjuntar estas líneas en el ticket y ofrecer una pequeña tabla CSV con timestamp, X-Cache/CF-Cache-Status, cookie presente (sí/no) permite acotar rápidamente si el problema es borde u origin
    RESUMIR CON IA: Extrae lo importante

    Comparte este artículo:

    𝕏 X (Twitter) f Facebook in LinkedIn 🔥 Reddit 🐘 Mastodon 🦋 Bluesky 💬 WhatsApp 📱 Telegram 📧 Email
    • Por qué tu caching rompe la performance multilingüe
    • Reduce carga y errores con caché del navegador y headers
    • Reduce hasta 50% el peso con imágenes WebP/AVIF
    • Prueba reproducible: PHP 8.2 vs 7.4 (CPU/RAM por petición)
    Josu Barrios

    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.

    Publicado: 04 de jun. de 2026
    Actualizado: 14 de jul. de 2026
    Por Josu Barrios

    En Optimización y velocidad.

    tags: caché WooCommerce CDN checkout rendimiento

    Aviso legal | Política de privacidad | Política de cookies
    Archivo de artículos

    Contactar

    Síguenos en LinkedIn

    © Mantenimiento WordPress. Todos los derechos reservados.