Revisá intentos de pago, devolvé cobros exitosos y reintentá renovaciones fallidas de forma segura.
Una transaction representa un intento de pago. Registra proveedor, monto, customer, recibo, estado y eventos del lifecycle sin exponer credenciales del proveedor.
Abrí Transactions para investigar un pago desde el dashboard o listalos desde tu aplicación:
import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const response = await commet.transactions.list();from commet import Commetcommet = Commet("ck_xxx")transactions_list_result = commet.transactions.list()client, err := commet.New("ck_xxx")if err != nil { log.Fatal(err)}ctx := context.Background()transactionsListResult, err := client.Transactions.List(ctx, nil)if err != nil { log.Fatal(err)}import co.commet.Commet;import co.commet.params.ListTransactionsParams;var commet = Commet.builder().apiKey("ck_xxx").build();var transactionsListResult = commet.transactions().list(ListTransactionsParams.builder().build());use Commet\Commet;$commet = new Commet('ck_xxx');$transactionsListResult = $commet->transactions->list();Un recibo puede tener varias transacciones cuando se reintenta una renovación. La transacción fallida original queda inmutable y el retry crea un intento nuevo.
import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const refund = await commet.transactions.refund({ id: "transaction_xxx" });from commet import Commetcommet = Commet("ck_xxx")refund = commet.transactions.refund("transaction_xxx")client, err := commet.New("ck_xxx")if err != nil { log.Fatal(err)}ctx := context.Background()refund, err := client.Transactions.Refund(ctx, "transaction_xxx", nil)if err != nil { log.Fatal(err)}import co.commet.Commet;import co.commet.params.RefundTransactionParams;var commet = Commet.builder().apiKey("ck_xxx").build();var refund = commet.transactions().refund( "transaction_xxx", RefundTransactionParams.builder().build());use Commet\Commet;$commet = new Commet('ck_xxx');$refund = $commet->transactions->refund(id: 'transaction_xxx');La operación solicita un refund completo y devuelve su estado real, normalizado entre proveedores. No otorgues la devolución en tu producto antes de confirmar el resultado. Procesá payment.refunded de forma idempotente para los cambios posteriores de acceso o balance.
import { Commet } from "@commet/node";const commet = new Commet({ apiKey: "ck_xxx" });const transactionRetry = await commet.transactions.retry({ id: "transaction_xxx" });from commet import Commetcommet = Commet("ck_xxx")transaction_retry = commet.transactions.retry("transaction_xxx")client, err := commet.New("ck_xxx")if err != nil { log.Fatal(err)}ctx := context.Background()transactionRetry, err := client.Transactions.Retry(ctx, "transaction_xxx", nil)if err != nil { log.Fatal(err)}import co.commet.Commet;import co.commet.params.RetryTransactionParams;var commet = Commet.builder().apiKey("ck_xxx").build();var transactionRetry = commet.transactions().retry( "transaction_xxx", RetryTransactionParams.builder().build());use Commet\Commet;$commet = new Commet('ck_xxx');$transactionRetry = $commet->transactions->retry(id: 'transaction_xxx');Retry aplica a renovaciones fallidas, no a cualquier pago one-time. Conserva el intento fallido para auditoría y devuelve el nuevo intento sin ocultar su resultado.
En una suscripción past_due, preferí las acciones de lifecycle de Manejar pagos fallidos cuando el customer necesite un recovery link o actualizar su método de pago.
Cambiar el routing no mueve un método guardado. El retry usa la conexión ya asociada a la suscripción.
¿Cómo está esta guía?