Saltar al contenido principal
Hay dos etapas en el producto Direct Debit:
  1. Tu usuario debe primero autorizar a Fintoc a debitar su cuenta. A esta autorización la llamamos Subscription.
  2. Una vez que el usuario autoriza a Fintoc, puedes crear cargos para debitar la cuenta de tu usuario.
El siguiente diagrama muestra cómo Fintoc interactúa tanto con tu backend como con tu frontend en ambas etapas.

Flujo de autorización

Antes de que puedas comenzar a crear cargos, tu usuario debe autorizar a Fintoc a debitar su cuenta. Esta autorización es lo que llamamos Subscription. Como en la mayoría de los productos de Fintoc, tu usuario debe pasar por el Widget para crear la suscripción. Hay tres pasos para crear suscripciones usando Fintoc:
  1. En tu backend, crea un SubscriptionIntent usando tu Secret Key
  2. Abre el widget en tu frontend usando tu Public Key
  3. Maneja los eventos posteriores a la suscripción

Crear un Subscription Intent

Para iniciar el proceso de suscripción, primero debes crear un Subscription Intent desde tu backend.
La respuesta debería verse así:
Observa que el Subscription Intent incluye un widget_token. Este token es necesario para abrir el Widget en el frontend de tu aplicación. La siguiente sección contiene más detalles al respecto.
Business Profile NamePuedes enviar business_profile.name para personalizar el nombre que se mostrará como la “Empresa Destinataria” en las pantallas del widget.

Abrir el widget para Subscriptions

Una vez creado el Subscription Intent, debes enviar su widget_token a tu frontend y usarlo para configurar el widget y el flujo que seguirá el usuario.
Widget TokenEl widget_token evita que tu aplicación tenga que enviar datos sensibles a Fintoc desde tu frontend. El token es temporal y expirará 10 minutos después de su creación.
Aquí tienes un ejemplo del widget configurado con el widget_token:
Usa los callbacks y eventos del Widget correctamenteNunca uses los callbacks onSuccess, onExit u onEvent para obtener el estado de la Subscription que se está creando. Debes usar estos callbacks solo para manejar el flujo de tu aplicación frontend, mientras esperas la confirmación del backend mediante Webhooks. Los eventos del frontend también pueden usarse para generar métricas sobre el uso general del widget, pero nunca debes basarte únicamente en ellos para asumir que una Subscription fue creada o falló al crearse.
Para leer más sobre el widget y su configuración, ve a la sección widget.

Manejar eventos posteriores a la suscripción

Una vez que un Subscription Intent termina, manejas el resultado de la suscripción en tu frontend y completas la suscripción en tu backend. Para tu frontend usarás el callback del widget, y para tu backend usarás los eventos enviados por webhooks.

Manejar el resultado de la suscripción en tu frontend

Una vez que un Subscription Intent termina exitosamente, el widget ejecuta el callback onSuccess. Necesitas pasarle esta función al widget al momento de crearlo. Con este callback puedes decidir qué hacer con el frontend de tu usuario una vez completada la suscripción, por ejemplo:
  • Redirigir al usuario a una vista posterior a la suscripción
  • Mostrar al usuario una pantalla de éxito.

Manejar errores

No solo necesitas manejar el caso exitoso, ya que las suscripciones también pueden fallar. Por ejemplo, tu cliente abandonó el proceso antes de completar la suscripción. Cuando una suscripción falla o es rechazada por tu cliente, el widget ejecuta el callback onExit. Con este callback puedes manejar errores en tu frontend. Por ejemplo, puedes invitar a tu cliente a reintentar el proceso. Para obtener la razón del error puedes acceder al callback onExit creando una instancia de él. Aquí un ejemplo:

Almacenar la suscripción creada

Para recibir notificaciones sobre el proceso de suscripción, primero debes haber creado un Webhook Endpoint en Fintoc y asignarle los eventos que quieres recibir. Es muy importante que te suscribas al evento subscription_intent.succeeded. Además, debes almacenar el subscription_id incluido en un lugar seguro al que puedas acceder más tarde. El subscription_id es necesario para crear Charges más adelante. El proceso de suscripción puede generar 3 eventos distintos que se envían a tu webhook endpoint:
Webhook del backend vs onSuccess del widgetEs muy importante que esperes el evento del webhook en tu backend para terminar el proceso. Nunca debes finalizar el flujo basándote únicamente en la función onSuccess del widget. Algunos usuarios pueden cerrar el widget antes de que el callback que envía el webhook a tu backend se ejecute.

Esperar la activación de la suscripción

La suscripción creada comienza con un estado pending. Esto indica que la suscripción se creó correctamente, pero todavía no se pueden crear cargos. Primero, Fintoc necesita que el banco confirme que la suscripción está operativa. Una nueva suscripción puede tardar hasta 5 días hábiles en estar operativa. Una vez que una suscripción se valida como lista para recibir cargos, se dispara un evento subscription.activated y se envía por webhooks. Si por alguna razón el banco informa a Fintoc que una suscripción ha sido cancelada, se disparará un evento subscription.canceled.
¿Qué sucede cuando el usuario crea un nuevo Subscription Intent con la misma cuenta bancaria?Cada flujo verifica si existen suscripciones previas creadas entre el usuario y tu organización. Si ya existe una activa, los usuarios verán una pantalla de éxito como confirmación y se enviará el evento subscription_intent.succeeded con el subscription.id activo.

Flujo de cargos

Crear un Charge

Fintoc usa el objeto Charge para representar un pago de suscripción. Desde tu backend, crea un Charge con el monto, la moneda y el subscription_id que obtuviste en el paso de autorización. También puedes agregar el objeto business_profile para facturación por categoría. Aquí un ejemplo:
La respuesta debería verse así:

Confirmación del cargo

Un cargo puede tardar hasta 2 días hábiles antes de tener confirmación de su éxito o falla:
  • Al crearse, los cargos tienen un estado inicial de pending.
  • Fintoc procesa los cargos una vez al día a las 2 pm. Cuando esto ocurre, el cargo pasa a in_progress y ya no se puede cancelar. Los cargos creados después de las 2 pm (hora de CL) se procesan el siguiente día hábil.
  • Durante los siguientes 2 días hábiles, el cargo pasa a succeeded o failed dependiendo del banco del usuario.
  • Tu usuario ve el cargo reflejado en su estado de cuenta bancario 2 días hábiles después de creado el cargo. Tu usuario sabrá si el cargo fue exitoso antes de que el banco notifique a Fintoc.
  • Los cargos se transfieren a tu cuenta bancaria el siguiente día hábil después de que pasaron al estado exitoso.
Las fallas pueden ocurrir por varias razones, como fondos insuficientes, que el monto cobrado sea mayor al monto autorizado, o que el cliente desactive la autorización desde su cuenta bancaria.

Webhooks de cargos

Una vez que se completa el cargo, te enviaremos un evento con charge como tipo a través de un webhook. Para suscribirte al evento, primero debes haber creado un Webhook Endpoint en Fintoc y asignarle los eventos que quieres recibir. Debes suscribirte a estos eventos, ya que puedes usarlos para identificar los cargos exitosos de los fallidos.
Charge Succeeded vs transferencia de fondosUn cargo se marca como exitoso cuando el banco confirma a Fintoc que ya se le ha cobrado al usuario el monto especificado. Esto no significa que esos fondos ya estén en la cuenta de tu organización. Fintoc tiene 1 día hábil para transferir ese dinero a tu cuenta.

Recibir fondos en tu cuenta

Una vez que creas un cargo a la cuenta de tu usuario, tomará de 3 a 4 días hábiles que esté disponible en tu cuenta bancaria. Esto depende principalmente de si el cargo se crea antes/después del horario de corte bancario. El esquema básico de tiempos es:
Veamos un ejemplo de un cargo creado a las 11:00 AM, antes del horario de corte bancario (02:00 PM):
Ahora, veamos otro ejemplo de un cargo creado a las 09:00 PM, después del horario de corte bancario (02:00 PM):

Bancos disponibles