Manejar pagos fallidos
Qué pasa cuando el pago de un cliente falla y cómo puede reactivar su suscripción desde el Portal del Cliente.
Cuando un pago falla, la suscripción pasa al estado past_due y el acceso a los features se revoca inmediatamente. Los clientes pueden reactivar su suscripción desde el Portal del Cliente reintentando el pago o actualizando su tarjeta.
Qué pasa cuando un pago falla
- La suscripción cambia al estado
past_due - El acceso a los features se revoca inmediatamente
- El cliente recibe una notificación por email
- El recibo fallido se marca como
uncollectible
La suscripción queda en past_due hasta que el cliente la reactive desde el portal o un admin la cancele manualmente.
Consultar el estado de la suscripción
const { data } = await commet.subscriptions.get('user_123')
if (data.status === 'past_due') {
// Pago fallido — invita al cliente a reactivar desde el portal
}response = commet.subscriptions.get(customer_id='user_123')
if response.data['status'] == 'past_due':
# Pago fallido — invita al cliente a reactivar desde el portal
passresult, err := client.Subscriptions.Get(ctx, "user_123")
if result.Data.Status == "past_due" {
// Pago fallido — invita al cliente a reactivar desde el portal
}ApiResponse<Subscription> result = commet.subscriptions().get("user_123");
if ("past_due".equals(result.getData().getStatus())) {
// Pago fallido — invita al cliente a reactivar desde el portal
}$result = $commet->subscriptions->get('user_123');
if ($result->data['status'] === 'past_due') {
// Pago fallido — invita al cliente a reactivar desde el portal
}curl "https://commet.co/api/subscriptions/active?customerId=user_123" \
-H "x-api-key: $COMMET_API_KEY"Restringir el acceso según el estado
Solo las suscripciones active y trialing tienen acceso a los features. Las suscripciones past_due quedan bloqueadas hasta que el cliente las reactive desde el portal.
const { data } = await commet.subscriptions.get('user_123')
const hasAccess = data.status === 'active' || data.status === 'trialing'response = commet.subscriptions.get(customer_id='user_123')
has_access = response.data['status'] in ('active', 'trialing')result, err := client.Subscriptions.Get(ctx, "user_123")
status := result.Data.Status
hasAccess := status == "active" || status == "trialing"ApiResponse<Subscription> result = commet.subscriptions().get("user_123");
String status = result.getData().getStatus();
boolean hasAccess = "active".equals(status) || "trialing".equals(status);$result = $commet->subscriptions->get('user_123');
$hasAccess = in_array($result->data['status'], ['active', 'trialing'], true);curl "https://commet.co/api/subscriptions/active?customerId=user_123" \
-H "x-api-key: $COMMET_API_KEY"Reactivación desde el Portal del Cliente
Los clientes en past_due ven su suscripción en el Portal del Cliente con un botón Reactivar suscripción. Pueden elegir:
- Reintentar con su tarjeta actual — útil cuando la falla fue temporal (fondos insuficientes que ya están disponibles, una retención bancaria que se liberó).
- Actualizar su método de pago — ingresar una nueva tarjeta vía Stripe y reintentar en el mismo paso.
Un reintento exitoso devuelve la suscripción a active, anula los recibos fallidos y emite un evento payment.recovered. Los reintentos están limitados a 3 por día por cliente.
Invitar a actualizar el pago
Redirige a los clientes al Portal del Cliente para reactivar:
const portal = await commet.portal.getUrl({ customerId: 'user_123' })
redirect(portal.data.portalUrl)portal = commet.portal.get_url(customer_id='user_123')
redirect(portal.data['portal_url'])portal, err := client.Portal.GetURL(ctx, &commet.GetPortalURLParams{
CustomerID: "user_123",
})
// redirect(portal.Data.PortalURL)ApiResponse<PortalSession> portal = commet.portal().getUrl("user_123", null, null);
// redirect(portal.getData().getPortalUrl())$portal = $commet->portal->getUrl(customerId: 'user_123');
redirect($portal->data['portalUrl']);curl -X POST https://commet.co/api/portal/request-access \
-H "x-api-key: $COMMET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"customerId": "user_123"}'Relacionado
- Recibos y ciclos de cobro — Tipos de recibo y momento del cobro
- Administrar suscripciones — Crear y administrar suscripciones de clientes
- Portal del Cliente — Portal de autogestión de cobros y pagos para clientes
¿Cómo está esta guía?