Commet
  • Pricing
Log InTry out
Introducción

Inicio rápido

Aprender

Recibos y ciclos de cobroManejar pagos fallidos

Recursos

Referencia del SDKVersionado de APIManejo de erroresTestingCLI

Plugins

Better Auth
DocumentaciónRecursosConstruir con AIAPI ReferenceWebhooks

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

  1. La suscripción cambia al estado past_due
  2. El acceso a los features se revoca inmediatamente
  3. El cliente recibe una notificación por email
  4. 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
    pass
result, 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?

Recibos y ciclos de cobro

Cómo Commet genera recibos, qué contienen y cuándo se cobra a los clientes.

Resumen de Finanzas

Cómo se mueve el dinero en Commet — balances, payouts e historial de transacciones.

En esta página

Qué pasa cuando un pago falla
Consultar el estado de la suscripción
Restringir el acceso según el estado
Reactivación desde el Portal del Cliente
Invitar a actualizar el pago
Relacionado