cauril/Docs

Checkout.js · @cauril/checkout-js

El drop-in del browser. Toma un client_secret, monta el campo de pago seguro del PSP, tokeniza del lado del cliente, maneja 3DS/vouchers y reroutea si un PSP no inicializa. Framework-agnóstico y sin dependencias.

Esta página es la referencia del paquete. Para el flujo completo de extremo a extremo (crear la sesión en tu server, confirmar por webhook) leé Checkout embebido.

Los datos de tarjeta van directo al PSP, nunca pasan por tu server ni por Cauril (PCI SAQ-A). Y el resultado del browser es para la UX: confirmá siempre el cobro en tu backend vía el webhook payment.succeeded antes de entregar.

Instalación

Con un bundler, instalá el paquete:

BASH
npm install @cauril/checkout-js

O cargá el drop-in con un <script> desde el CDN; expone un global window.Cauril:

HTML
<script src="https://js.cauril.com/v1/checkout.js"></script>
La API es idéntica por las dos vías: import { Cauril } from "@cauril/checkout-js" o el global Cauril del <script>.

Uso

Pasá al browser el client_secret que devolvió POST /v1/checkout/sessions (nunca tu sk_), creá el checkout y montalo en un contenedor:

JS
import { Cauril } from "@cauril/checkout-js";

const checkout = Cauril.checkout({
  clientSecret: "cs_01J..._secret_aGVsbG8", // del POST /v1/checkout/sessions
});

checkout.on("completed", ({ payment_status }) => {
  // UX: mandá al comprador a la página de éxito.
  // El cobro REAL se confirma por webhook.
  window.location.assign("/gracias");
});
checkout.on("failed", ({ code, message }) => console.error(code, message));

await checkout.mount("#cauril-checkout");

Opciones de Cauril.checkout(options)

CampoDefaultQué hace
clientSecretRequerido. El client_secret de la sesión (lleva el id adentro).
baseUrlhttps://api.cauril.comOrigen de la API.
localede la sesión / browserFuerza el idioma: "es", "pt" o "en".
appearanceTema y estilo controlado (ver abajo).
onComplete"manual""redirect" navega a success_url al completar; "manual" solo emite completed.

Métodos del controlador

MétodoQué hace
mount(target)Monta el drop-in en un selector o HTMLElement. Devuelve una Promise. Idempotente.
on(event, handler)Se suscribe a un evento. Devuelve una función para desuscribirse.

Eventos

Los códigos vienen siempre normalizados, nunca strings crudos del PSP.

EventoCuándoPayload
readyEl drop-in cargó y mostró el campo de pago.{ session }
method_selectedEl comprador eligió un método.{ method }
processingEl cobro está en curso.
requires_actionHace falta una acción (ej. 3DS, voucher).{ next_action }
completedLa sesión se completó (confirmada por webhook).{ payment_status }
failedEl pago fue rechazado.{ code, message }
expiredLa sesión expiró sin pagar.
errorError al montar o de red.{ code, message }

Apariencia

Subconjunto controlado (sin CSS arbitrario, por seguridad): theme (light/dark), accent (color del botón, sanitizado), radius (0–24 px) y font (system/serif/mono).

JS
Cauril.checkout({
  clientSecret,
  appearance: { theme: "light", accent: "#0a7cff", radius: 8, font: "system" },
}).mount("#cauril-checkout");

Errores

El paquete exporta CheckoutError (con code y, cuando aplica, status). Los fallos de pago llegan además por el evento failed con su código normalizado, así que normalmente alcanza con escuchar los eventos.

Reintento entre PSPs

Si el PSP ruteado no inicializa (SDK caído, conexión mal configurada), el drop-in le pide a la API rerutear a otro PSP elegible y se vuelve a montar, antes de que el comprador escriba nada. Es automático; no tenés que manejarlo.