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.
provider indica quién procesó el cobro. paymentMethod indica el medio usado en ese intento (card, mercado_pago u oxxo), o null si no se conoce. El dato de la transacción no cambia aunque el cliente guarde otro medio después.
subPaymentMethod indica de dónde salieron los fondos de un cobro con Mercado Pago cuando dLocal lo informa: credit_card, debit_card, prepaid_card, bank_transfer o account_money. Es null si falta el dato o no se reconoce. El dashboard también muestra la marca y los últimos cuatro dígitos si dLocal los informa para ese cobro.
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.
La suscripción y su calendario de renovación quedan como estaban, incluso si se devuelve todo el pago. Para terminar la suscripción, cancelala por separado.
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?