Aceptar pagos únicos
Cobra a tus clientes una sola vez con el recurso payments de Commet — sin suscripción ni plan. Impuestos, recibo y comprobante de forma automática.
Un pago es un cargo único independiente, sin suscripción ni plan asociado.
Commet calcula los impuestos, genera un recibo y envía un comprobante en cada pago de forma automática.
Para deals de por vida y compras únicas cobradas como un plan (trials, intro offers, add-ons, modelos de consumo), usa Pagos únicos en su lugar.
Link vs. charge
Hay dos formas de tomar un pago único.
- Link (
payments.create): genera un link de pago alojado. El cliente abre laurly paga con cualquier tarjeta. Guarda (vault) el método de pago al confirmar. - Charge (
payments.charge): cobra el método de pago ya guardado del cliente fuera de sesión. Sin interacción del cliente, sinurl.
Crear un link de pago
Devuelve un Payment con una url. Redirige al cliente a esa URL para cobrar.
const { data } = await commet.payments.create({
amount: 25000,
currency: 'usd',
description: 'Annual report',
customerId: 'user_123',
successUrl: 'https://yourapp.com/thanks',
})
redirect(data.url)response = commet.payments.create(
amount=25000,
currency='usd',
description='Annual report',
customer_id='user_123',
success_url='https://yourapp.com/thanks',
)
redirect(response.data['url'])result, err := client.Payments.Create(ctx, &commet.CreatePaymentParams{
Amount: 25000,
Currency: "usd",
Description: "Annual report",
CustomerID: "user_123",
SuccessURL: "https://yourapp.com/thanks",
})
// redirect(result.Data.URL)CreatePaymentParams params = CreatePaymentParams.builder()
.amount(25000)
.currency("usd")
.description("Annual report")
.customerId("user_123")
.successUrl("https://yourapp.com/thanks")
.build();
ApiResponse<Payment> result = commet.payments().create(params);
// redirect(result.getData().getUrl())$result = $commet->payments->create(
amount: 25000,
currency: 'usd',
description: 'Annual report',
customerId: 'user_123',
successUrl: 'https://yourapp.com/thanks',
);
redirect($result->data['url']);curl -X POST https://commet.co/api/payments \
-H "x-api-key: $COMMET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 25000,
"currency": "usd",
"description": "Annual report",
"customerId": "user_123",
"successUrl": "https://yourapp.com/thanks"
}'amount está en centavos. 25000 son $250.00.
Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
amount | number | Sí | Monto a cobrar en centavos |
currency | string | Sí | Código de moneda ISO 4217 (usd, eur, brl) |
description | string | Sí | Aparece en el link de pago, el recibo y el comprobante |
customerId | string | No | ID de cliente de Commet (cus_xxx) o tu ID externo |
successUrl | string | No | A dónde llega el cliente después de pagar |
metadata | object | No | Pares clave-valor. Forma: { [key: string]: string } |
Cobrar un método de pago guardado
Cobra el método de pago guardado del cliente fuera de sesión. El cliente debe tener un método de pago en archivo.
const { data } = await commet.payments.charge({
customerId: 'user_123',
amount: 25000,
currency: 'usd',
description: 'Annual report',
})response = commet.payments.charge(
customer_id='user_123',
amount=25000,
currency='usd',
description='Annual report',
)result, err := client.Payments.Charge(ctx, &commet.ChargePaymentParams{
CustomerID: "user_123",
Amount: 25000,
Currency: "usd",
Description: "Annual report",
})ChargePaymentParams params = ChargePaymentParams.builder()
.customerId("user_123")
.amount(25000)
.currency("usd")
.description("Annual report")
.build();
ApiResponse<Payment> result = commet.payments().charge(params);$result = $commet->payments->charge(
customerId: 'user_123',
amount: 25000,
currency: 'usd',
description: 'Annual report',
);curl -X POST https://commet.co/api/payments/charge \
-H "x-api-key: $COMMET_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "user_123",
"amount": 25000,
"currency": "usd",
"description": "Annual report"
}'Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
customerId | string | Sí | ID de cliente de Commet (cus_xxx) o tu ID externo |
amount | number | Sí | Monto a cobrar en centavos |
currency | string | Sí | Código de moneda ISO 4217 (usd, eur, brl) |
description | string | Sí | Aparece en el recibo y el comprobante |
metadata | object | No | Pares clave-valor. Forma: { [key: string]: string } |
Obtener un pago
const { data } = await commet.payments.get({ id: 'pay_123' })Listar pagos
const { data } = await commet.payments.list({
customerId: 'user_123',
limit: 20,
})| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
customerId | string | No | Filtra por un cliente |
limit | number | No | Tamaño de página |
cursor | string | No | Cursor de paginación de la página anterior |
Cancelar un link de pago
Cancela un link pendiente para que ya no se pueda pagar.
await commet.payments.cancel({ id: 'pay_123' })Solo se puede cancelar un link que no haya sido pagado ni haya empezado a procesarse. Los charges no se pueden cancelar.
El objeto Payment
| Campo | Tipo | Descripción |
|---|---|---|
id | string | ID del pago (pay_xxx) |
customerId | string | null | Cliente al que pertenece el pago |
kind | "link" | "charge" | Cómo se tomó el pago |
status | string | Estado actual (ver abajo) |
provider | "stripe" | "commet" | Proveedor de pago que lo procesó |
amountSubtotal | number | Monto antes de impuestos en centavos |
taxAmount | number | Impuestos en centavos |
amountTotal | number | Subtotal + impuestos en centavos |
currency | string | Código de moneda ISO 4217 |
description | string | Descripción definida al crear |
metadata | object | null | Pares clave-valor definidos al crear |
url | string | null | Link de pago alojado. null para charges |
expiresAt | string | null | Cuándo expira el link |
createdAt | string | Fecha y hora ISO 8601 |
updatedAt | string | Fecha y hora ISO 8601 |
object | "payment" | Tipo de objeto |
livemode | boolean | false para pagos de sandbox |
Estados
pending: El link se creó y espera a que el cliente pague.processing: El pago se está confirmando con el proveedor.succeeded: El pago se completó y se generó un recibo.requires_action: El cliente debe completar un paso extra como 3D Secure.failed: El pago no se concretó.canceled: El link se canceló antes del pago.
Ver en el dashboard
Ve a Payments. Cada pago muestra su estado, monto, impuestos, cliente y el recibo generado.
Limitaciones
amountestá en centavos — unidades menores de la moneda- Los impuestos se calculan automáticamente y se suman sobre el
amount payments.chargerequiere un método de pago guardado en el cliente- Los charges no se pueden cancelar
- Un link solo se puede cancelar mientras está
pending
Relacionado
- Pagos únicos — Cargos únicos cobrados como un plan
- Recibos y ciclos de cobro — Cómo se generan los recibos
- Gestionar clientes — Crear clientes y guardar métodos de pago
- Referencia del SDK — Métodos del SDK de Node.js
¿Cómo está esta guía?