Skip to main content
Cuando un pago falla, Dodo Payments te indica por qué a través de un error_code estandarizado y un error_message legible para humanos. Esta guía muestra cómo leer esos campos, decidir si vale la pena reintentar, y recuperar el pago sin exponer información sensible a los clientes.

Cómo Dodo Payments Informa un Fallo

Cada pago fallido, ya sea una compra única o una renovación de suscripción, lleva los mismos campos de fallo en el objeto de pago:
error_code e error_message son null hasta que un pago realmente falle. Siempre verifica status primero, luego lee los campos de error.

El Webhook payment.failed

La manera más confiable de detectar un fallo es el webhook payment.failed. El evento envuelve el objeto de pago completo en data:
payment.failed payload
Un manejador mínimo lee error_code y lo encamina:
Siempre verifica la firma del webhook antes de procesar. Consulta la guía de Webhooks para la configuración completa, incluyendo la verificación de firma e idempotencia.

Decidir si Reintentar: Rechazos Suaves vs. Duros

El error_code te indica si vale la pena reintentar el mismo método de pago. La referencia de Fallos de Transacción lista el tipo de rechazo y la acción recomendada para cada error_code.

Manejo de Fallos en el Pago vs. en la Renovación

Cómo te recuperas depende de si el cliente está presente.
El cliente está realizando la compra activamente. Muestra un mensaje claro y permite que reintenten inmediatamente o usen otra tarjeta.
  • requires_payment_method — el cliente nunca proporcionó un método de pago: no ingresaron detalles de la tarjeta o se les solicitó uno y no tomaron acción. Esto usualmente es un abandono de carrito de compra, no un rechazo — vuelve a involucrar al cliente para completar el pago (consulta Recuperación de Carrito Abandonado).
  • requires_customer_action — se necesita autenticación adicional (como 3DS); haz que el cliente la complete. Consulta el manejo de 3D Secure.

Reintentando un Pago Fallido

  • Suscripciones: Activa Reintentos de Pago de Suscripción para recuperar rechazos suaves sin trabajo de integración. También puedes desencadenar la recuperación haciendo que el cliente actualice su método de pago a través de la API de Actualización de Método de Pago, que carga cualquier saldo pendiente.
  • Pagos únicos: Reenvía el checkout o payment_link para que el cliente pueda intentarlo de nuevo con un método diferente. No hay reintento automático para pagos únicos.
No reintentes rechazos duros con la misma tarjeta. Las redes de tarjetas pueden marcar rechazos repetidos como abusivos, lo que perjudica tu tasa de autorización.

Mostrar Errores a los Clientes de Manera Segura

Muestra a los clientes un mensaje amigable — nunca el error_code crudo.
Customer-facing messaging
Nunca reveles la razón real para STOLEN_CARD, LOST_CARD, PICKUP_CARD, o FRAUDULENT. Mostrar estos puede alertar a un actor fraudulento. Muestra un mensaje genérico de rechazo y solo registra el error_code específico internamente.

Relacionado

Transaction Failures

Cada código de rechazo, su tipo, y la acción recomendada.

Error Codes

Errores de API y lógica de negocio que no son rechazos de tarjeta.

Subscription Payment Retries

Recuperación automática de rechazos suaves en renovaciones de suscripción.

Subscription Dunning

Secuencias de email que recuperan rechazos duros.

Payment Webhooks

Esquema completo de carga útil para eventos de pago.

Testing Failures

Tarjetas de prueba que simulan rechazos y fallos de renovación.
Última modificación el 18 de junio de 2026