Payment Method Selector
This page will help you get started with the Payment Method Selector embedded checkout (SDK channel).
El Payment Method Selector es un componente embebido que muestra al usuario todos los medios de pago habilitados para el comercio y monta automáticamente el checkout del medio elegido, sin salir de la web de la tienda.
Esta documentación cubre únicamente la integración por canal SDK.
Changelog
| Fecha | Versión | Breaking changes | Cambios |
|---|---|---|---|
| 03 jul 2026 | 1.0.0 | NO | Primera versión |
V1.0.0
Integración
-
Crea una transacción de selección de medio de pago contra el backend de Koin.
-
La respuesta incluye un
transaction_id(y unreturn_urlpor si prefieres redirigir al usuario al checkout hospedado de Koin). -
Para la integración SDK, utiliza el
transaction_idrecibido. -
Agrega el script de checkout de Koin.
- Producción: https://payments.koin.com.br/checkout/sdk/v1/methods.js
- Sandbox: https://portal-dev.koin.com.br/checkout/sdk/v1/methods.js
API
- Luego de agregar el script de checkout de Koin a tu página tendrás disponible dentro de window un objeto llamado KoinPayments.
- Crear una instancia del Payment Method Selector de la siguiente manera (se espera el transaction_id que recibiste en la respuesta de la creación de la transacción):
const pms = await window.KoinPayments.transaction(transactionId);Si falta transaction_id, el constructor lanza un UnifiedError con código INIT_MISSING_TRANSACTION_ID.
- Una vez hecho esto, tendremos un objeto creado con los siguientes métodos:
- initialize(afterInitializedCallback, options?): El método
afterInitializedCallbackse ejecuta cuando el selector se inicializó correctamente. Caso contrario se puede recibir el error utilizando onError. Opcionalmente podés pasar options:{ language?: 'es' | 'en' | 'pt' }para forzar el idioma del checkout. - mount(containerTarget): Monta el selector en el contenedor indicado. Recibe un HTMLElement (no un selector CSS). Los errores relacionados a esta función se devuelven en el onError. Debe llamarse dentro del callback de initialize.
- onError({code, origin, message}): Manejo de errores de Koin. Siempre siguen el mismo formato.
- onEvent(code, payload): Eventos para comunicar el estado del proceso. El payload es opcional dependiendo del evento que se dispare.
- onSuccess(data): Callback que se ejecuta cuando el medio de pago activo reporta un éxito intermedio. El formato de
datadepende del medio elegido. - onFinish(data): Callback que se ejecuta cuando el pago alcanza un estado terminal. El campo
data.statuspuede ser uno de los siguientes valores:
- initialize(afterInitializedCallback, options?): El método
data.status | Descripción |
|---|---|
Authorized | El pago fue autorizado. |
Collected | El pago fue cobrado. |
Cancelled | El pago fue cancelado por el usuario o expiró. |
Failed | Ocurrió un error interno y el caso es irrecuperable. |
Voided | La autorización fue anulada. |
- destroy(): Elimina la instancia activa y vacía el contenedor.
Medios disponibles (según configuración del comercio):
Si tu sitio define una Content Security Policy (CSP), revisá Content Security Policy.
Eventos
| Code | Description | Origen |
|---|---|---|
| CHECKOUT_LOADED | Ocurre cuando la lista de medios cargó y el selector está listo. | Koin |
| EXPIRED | Ocurre cuando la sesión de selección expiró (no dispara onFinish). | Koin |
Errores
| Code | Description | Origen |
|---|---|---|
| INIT_MISSING_TRANSACTION_ID | Ocurre cuando el transactionId usado en KoinPayments.transaction() es undefined o null (se lanza en el constructor). | Koin |
| MOUNT_ERROR | Ocurre cuando el contenedor no es válido o falló el renderizado del selector. | Koin |
| INITIALIZATION_ERROR | Ocurre cuando falló la inicialización del selector. | Koin |
| PAYMENT_METHODS_LOAD_ERROR | Ocurre cuando no se pudieron cargar los medios de pago o la lista quedó vacía. | Koin |
| PAYMENT_METHOD_SELECTION_ERROR | Ocurre cuando falló la selección o el cableado de un medio de pago. | Koin |
También pueden llegar errores propagados desde el medio de pago embebido (origin distinto de KOIN, p. ej. ASTRO_PAY, PAYPAL). No los listamos aquí. Recomendamos manejar todos los errores de la misma forma: son irrecuperables — informá al usuario y ofrecé reintentar creando una nueva transacción.
Ejemplo
1 - Crear una instancia de checkout
Solo deberán pasar el transactionId generado en Koin.
const pms = await window.KoinPayments.transaction(transactionId);2 - Agregar listeners
pms.onError((error) => {
console.log("Error from callback: ", error.code, error.message, error.origin);
});
pms.onFinish((data) => {
console.log("Finish from callback: ", data);
switch (data.status) {
case "Collected":
case "Authorized":
// Ocurre cuando el pago fue exitoso
break;
case "Cancelled":
// Ocurre cuando el pago fue cancelado por el usuario o expiró
break;
case "Failed":
// Ocurre cuando un error interno y el caso es irrecuperable
break;
case "Voided":
// Ocurre cuando la autorización fue anulada
break;
}
});3 - Iniciar flujo y montar el checkout de Koin
El método initialize se puede usar la cantidad de veces que se necesite.
Importante: el método mount se debe usar siempre dentro del callback del initialize:
const container = document.getElementById("checkout-container");
pms.initialize(
() => {
console.log("Initialized");
pms.mount(container);
},
{ language: "es" },
);4 - Código completo
async function mountPaymentMethodSelector(transactionId) {
try {
const pms = await window.KoinPayments.transaction(transactionId);
pms.onError((error) => {
console.log(
"Error from callback: ",
error.code,
error.message,
error.origin,
);
});
pms.onFinish((data) => {
console.log("Finish from callback: ", data);
switch (data.status) {
case "Collected":
case "Authorized":
break;
case "Cancelled":
case "Failed":
case "Voided":
break;
}
});
const container = document.getElementById("checkout-container");
pms.initialize(
() => {
console.log("Initialized");
pms.mount(container);
},
{ language: "es" },
);
} catch (error) {
console.error("Failed to create Payment Method Selector:", error);
}
}Playground
Updated 19 days ago
