WooCommerce Payment Recovery
Recuperación de pagos fallidos o pendientes.
by JuanmderosaDeveloper · github.com/juanmderosa/woocommerce-payment-recovery
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/juanmderosa/woocommerce-payment-recovery/archive/refs/heads/main.zipPlugin para recuperar pagos fallidos o pendientes en WooCommerce mediante correos de recordatorio automáticos
📋 Descripción
WooCommerce Payment Recovery es un plugin que ayuda a recuperar pedidos abandonados enviando correos automáticos de recordatorio cuando un cliente no completa el pago.
Características
✅ 3 correos de recordatorio automáticos con tiempos configurables
✅ Cancelación automática de órdenes impagadas
✅ Botones dinámicos para completar pago y restaurar carrito
✅ Dashboard analítico para visualizar recuperación e ingresos
✅ Plantillas profesionales con estilos de WooCommerce
✅ Totalmente configurable desde admin de WordPress
✅ Logs detallados para debugging
✅ Compatible con variable products y productos con variaciones
✅ Integración con ActionScheduler para ejecución confiable
🚀 Novedades en la Versión 1.1.0
- Dashboard Analítico: Nueva pestaña en el panel para contabilizar en tiempo real el total de intentos de recuperación, órdenes recuperadas exitosamente, la tasa de conversión y los ingresos salvados.
- Cancelación Inteligente de Tareas: Los cron-jobs de e-mails pendientes y auto-cancelación se eliminan automáticamente de la cola en ActionScheduler en el momento que un cliente logra realizar el pago de la orden (pasando a estado processing o completed).
- Prevención de Correos Duplicados: Se implementó una verificación con metadatos de órdenes (
_wcpr_recovery_scheduled) para evitar que bajo ninguna circunstancia se envíen "loops" infinitos o correos paralelos repetidos a un cliente, mejorando la compatibilidad con opciones de terceros. - Flujo Especializado para Órdenes Canceladas: Al enviar el email de aviso de cancelación, se omiten explícitamente los llamados engañosos a la acción como el botón principal de "Completar Pago".
- Limpieza de Arquitectura: El hook general que validaba contra plugins de terceros (
wcf_ca_should_send_email) ha sido depurado en favor de un flujo interno nativo y más robusto gobernado por los estados de WooCommerce.
🔧 Requisitos
- WordPress: 5.0 o superior
- PHP: 7.4 o superior
- WooCommerce: 3.0 o superior
- ActionScheduler: Incluido en WooCommerce 7.0+n
Verificar dependencias
- Ve a WooCommerce > Estado del sitio
- Busca "ActionScheduler" - debe mostrar "✅ Disponible"
📦 Instalación
Opción 1: Descarga manual
- Descarga el plugin desde GitHub
- Ve a Plugins > Añadir nuevo > Subir plugin
- Sube el archivo
.zip - Activa el plugin
Opción 3: Través de SFTP
# Descarga el repositorio
git clone https://github.com/juanmderosa/wc-payment-recovery.git
# Sube a tu servidor
sftp user@tuservidor.com
put -r wc-payment-recovery /wp-content/plugins/
⚙️ Configuración
Configuración Básica
- Ve a WooCommerce > Payment Recovery
- Ajusta los siguientes parámetros:
| Opción | Valor por defecto | Descripción |
|---|---|---|
| Email 1 Activado | ✅ Sí | Enviar primer recordatorio |
| Email 1 Retraso | 2 minutos | Tiempo hasta enviar email 1 |
| Email 2 Activado | ✅ Sí | Enviar segundo recordatorio |
| Email 2 Retraso | 5 minutos | Tiempo hasta enviar email 2 |
| Email 3 Activado | ✅ Sí | Enviar tercer recordatorio |
| Email 3 Retraso | 10 minutos | Tiempo hasta enviar email 3 |
| Cancelación Automática | ✅ Sí | Cancelar orden si sigue impaga |
| Retraso de Cancelación | 30 minutos | Tiempo hasta cancelar |
Personalización de Correos
Ve a WooCommerce > Configuración > Correos para:
- Cambiar el asunto de cada correo
- Personalizar el contenido
- Habilitar/deshabilitar cada tipo
🧪 Casos de Prueba
Test 1: Verificar que el plugin se carga
Objetivo: Confirmar que el plugin está activo y funcionando
Pasos:
- Ve a Plugins y verifica que "WooCommerce Payment Recovery" está activo
- Ve a WooCommerce > Payment Recovery
- Deberías ver el panel de configuración
Resultado esperado: ✅ El panel carga sin errores y muestras las opciones
Test 2: Crear una orden de prueba impaga
Objetivo: Generar una orden en estado "pending" para que el plugin la procese
Pasos:
- Ve al frontend de tu tienda
- Añade un producto al carrito
- Procede al pago
- En la página de pago, NO completes el pago (cierra la pestaña, o espera timeout)
- Verifica que la orden quedó en estado "Pending" (WooCommerce > Pedidos)
Resultado esperado: ✅ La orden aparece con estado "pending" o "failed"
Test 3: Verificar que se programan las acciones
Objetivo: Confirmar que el plugin crea las acciones programadas en ActionScheduler
Pasos:
- Crea una orden de prueba (Test 2)
- Ve a Herramientas > Acciones programadas (si existe)
- Busca acciones con grupo "wc-payment-recovery"
- Deberías ver ~4 acciones pendientes para esa orden
Alternativa: Revisa los logs en wp-content/debug.log:
[WCPR] Email 1 programado
[WCPR] Email 2 programado
[WCPR] Email 3 programado
[WCPR] Cancelación automática programada
Resultado esperado: ✅ Las 4 acciones aparecen programadas o en logs
Test 4: Verificar envío del Email 1
Objetivo: Confirmar que se envía el primer correo de recordatorio
Pasos:
- Crea una orden de prueba (Test 2)
- Espera 2 minutos (o el tiempo configurado)
- Revisa el correo en tu cliente de email
- Verifica que contiene:
- Saludo con nombre del cliente
- Mensaje de recuperación
- Tabla con productos
- Total del pedido
- Botón "Completar pago"
- Botón "Volver al carrito"
- Tiempo de reserva
Alternativa: Si ActionScheduler no ejecuta automáticamente:
- Ejecuta este comando en CLI:
wp actionscheduler run --hook=wcpr_send_email_1 --force
Resultado esperado: ✅ Email 1 llega a la bandeja de entrada con formato correcto
Test 5: Probar botón "Completar pago"
Objetivo: Verificar que el botón dirija correctamente a checkout
Pasos:
- Abre el Email 1 que recibiste
- Haz clic en "Completar pago"
- Deberías ir a la página de checkout con la orden pre-cargada
- Completa el pago con tarjeta de prueba
Resultado esperado: ✅ El pago se procesa y la orden cambia a "processing"
Test 6: Probar botón "Volver al carrito"
Objetivo: Verificar que se restaura el carrito correctamente
Pasos:
- Abre el Email 1 que recibiste
- Haz clic en "Volver al carrito"
- Deberías ver el carrito con los productos originales (incluyendo variaciones)
- Verifica que aparecen:
- Nombre del producto
- Cantidad
- Opciones/variaciones (si las hay)
- Total correcto
Resultado esperado: ✅ El carrito se restaura con todos los items y variaciones intactas
Test 7: Verificar Email 2 y 3
Objetivo: Confirmar que se envían los correos de recordatorio posteriores
Pasos:
- Crea una orden de prueba (Test 2)
- Espera 5 minutos → Verifica Email 2
- Espera 10 minutos → Verifica Email 3
- En cada correo verifica que contiene el mensaje correspondiente
Resultado esperado: ✅ Email 2 y Email 3 llegan en los tiempos configurados
Test 8: Verificar cancelación automática
Objetivo: Confirmar que se cancela automáticamente después del tiempo configurado
Pasos:
- Crea una orden de prueba (Test 2)
- Nota el ID y estado actual
- Espera el tiempo de cancelación (30 min por defecto)
- Ve a WooCommerce > Pedidos
- Abre la orden y verifica que está en estado "Cancelled"
- Revisa que tenga una nota: "Pedido cancelado por falta de pago"
Resultado esperado: ✅ La orden se cancela automáticamente después del tiempo configurado
Test 9: Verificar email de cancelación
Objetivo: Confirmar que se envía email cuando se cancela
Pasos:
- Crea una orden de prueba (Test 2)
- Espera 30 minutos (o tiempo configurado)
- Revisa tu email
- Verifica que el correo de cancelación contiene:
- Mensaje de cancelación
- Tabla con productos
- Total
- NO contiene botones de pago
Resultado esperado: ✅ Se recibe email de cancelación con contenido correcto
Test 10: Probar con productos variables
Objetivo: Verificar que funciona correctamente con variaciones (talla, color, etc.)
Pasos:
- Selecciona un producto variable (ej: "Jean" con talla M, color azul)
- Selecciona las variaciones específicas
- Añade al carrito y procede a crear orden impaga
- Espera Email 1
- Abre Email 1 y haz clic en "Volver al carrito"
- Verifica que el carrito muestra el producto CON las variaciones seleccionadas
- Intenta modificar cantidades - el producto no debe pedir "elegir opciones"
Resultado esperado: ✅ El producto con variaciones se restaura correctamente sin pedir opciones
Test 11: Verificar logs (si WP_DEBUG está activo)
Objetivo: Validar que el plugin registra eventos correctamente
Pasos:
- Asegúrate que
WP_DEBUGestá activo enwp-config.php - Crea una orden de prueba
- Ve a Servidor > wp-content/debug.log (vía SFTP)
- Busca logs con
[WCPR]
Logs esperados:
[WCPR] === WCPR PLUGIN INICIADO ===
[WCPR] ✓ HOOK CHECKOUT DISPARADO
[WCPR] Email 1 programado
[WCPR] Email 2 programado
[WCPR] Email 3 programado
[WCPR] Cancelación automática programada
Resultado esperado: ✅ Aparecen todos los logs de inicialización y programación
Test 12: Desactivar y reactivar el plugin
Objetivo: Verificar que el plugin se carga correctamente después de reactivar
Pasos:
- Ve a Plugins
- Haz clic en Desactivar en "WooCommerce Payment Recovery"
- Espera 3 segundos
- Haz clic en Activar
- Verifica que aparece el panel de configuración sin errores
Resultado esperado: ✅ Se activa sin errores y mantiene la configuración
📊 Checklist de Testing
| Test | Completado | Notas |
|---|---|---|
| Test 1: Plugin carga | ☐ | |
| Test 2: Orden impaga | ☐ | |
| Test 3: Acciones programadas | ☐ | |
| Test 4: Email 1 | ☐ | |
| Test 5: Botón completar pago | ☐ | |
| Test 6: Botón carrito | ☐ | |
| Test 7: Email 2 y 3 | ☐ | |
| Test 8: Cancelación automática | ☐ | |
| Test 9: Email cancelación | ☐ | |
| Test 10: Productos variables | ☐ | |
| Test 11: Logs | ☐ | |
| Test 12: Reactivar | ☐ |
🔍 Debugging
Habilitar logs
-
Edita
wp-config.php:define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); -
Los logs aparecerán en
wp-content/debug.log
Buscar logs específicos
# Mostrar últimos logs del plugin
tail -100 wp-content/debug.log | grep WCPR
# Mostrar solo errores
grep -i error wp-content/debug.log | grep WCPR
Ejecutar acciones manualmente (WP-CLI)
# Enviar Email 1 para orden específica
wp eval 'do_action("wcpr_send_email_1", 12345);'
# Cancelar orden específica
wp eval 'do_action("wcpr_cancel_order", 12345);'
# Ver acciones programadas
wp actionscheduler list --group=wc-payment-recovery
❌ Solución de Problemas
"ActionScheduler no disponible"
Causa: WooCommerce < 7.0 sin ActionScheduler
Solución:
- Actualiza WooCommerce a 7.0+, O
- Instala el plugin "Action Scheduler" desde WordPress.org
Los correos no se envían
Checklist:
- [ ] ¿ActionScheduler está disponible? (WooCommerce > Estado)
- [ ] ¿El plugin está activo?
- [ ] ¿Los emails están habilitados en WooCommerce > Configuración > Correos?
- [ ] ¿La orden está en estado "pending" o "failed"?
- [ ] ¿El servidor ejecuta tareas cron? (Verifica con
curl https://tutienda.com/wp-cron.php) - [ ] ¿WP_DEBUG está activo? (Revisa debug.log para errores)
El correo de cancelación no se envía
Checklist:
- [ ] ¿ActionScheduler está disponible? (WooCommerce > Estado)
- [ ] ¿El plugin está activo?
- [ ] ¿Los emails están habilitados en WooCommerce > Configuración > Correos?
- [ ] ¿La orden está en estado "pending" o "failed"?
- [ ] Ve a Woocommerce > Ajustes > Productos > Intentario y pon "Reservar en inventario (en minutos)" con un valor 1 minuto superior al e-mail de cancelación.
- [ ] ¿El servidor ejecuta tareas cron? (Verifica con
curl https://tutienda.com/wp-cron.php) - [ ] ¿WP_DEBUG está activo? (Revisa debug.log para errores)
Las órdenes no se cancelan
Checklist:
- [ ] ¿La cancelación automática está habilitada?
- [ ] ¿Ya pasó el tiempo configurado?
- [ ] ¿La orden sigue en estado "pending"? (Si cambió a "processing", no se cancela)
- [ ] ¿Hay un hook que impide la cancelación?
"Por favor, elige las opciones del producto" al volver al carrito
Causa: Las variaciones no se capturaron correctamente
Solución:
- Asegúrate que estás usando la versión más reciente
- Vacía cache del servidor
- Intenta desde navegador incógnito
📝 Logs de Ejemplo
Inicio correcto del plugin
[12-Mar-2026 10:00:00 UTC] [WCPR] === WCPR PLUGIN INICIADO ===
[12-Mar-2026 10:00:01 UTC] [WCPR] ✓ HOOK CHECKOUT DISPARADO | Array ( [order_id] => 12345 )
[12-Mar-2026 10:00:02 UTC] [WCPR] Email 1 programado | Array ( [order_id] => 12345 [delay] => 2 )
[12-Mar-2026 10:00:03 UTC] [WCPR] Email 2 programado | Array ( [order_id] => 12345 [delay] => 5 )
Error común
[12-Mar-2026 10:00:00 UTC] [WCPR] ERROR: ActionScheduler no disponible
📄 Licencia
GPL v2
🤝 Contribuciones
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nombre) - Commit tus cambios (
git commit -am 'Add feature') - Push a la rama (
git push origin feature/nombre) - Abre un Pull Request
📧 Soporte
Para reportar bugs o sugerencias, abre un issue en GitHub o contactame a juanmderosa@gmail.com.
Última actualización: 16 de abril de 2026
Versión: 1.1.0