> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fintoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Integración web

> Referencia para integrar el Widget en tu aplicación web o página web

### Integración con HTML plano

Para integrar el Widget solo necesitas incluir el script de Fintoc en tu HTML. El script de Fintoc debe estar en cada página donde se necesite usar el Widget.

```html theme={null}
<script src="https://js.fintoc.com/v1/"></script>
```

<Info>
  **window\.onload**

  Recuerda que, al importar un `script` de JavaScript, si intentas usar funciones antes de que el navegador cargue el `script`, se lanzará un error. Puedes resolver esto usando el evento nativo del navegador `window.onload`.
</Info>

### Integración como módulo ES

¡También puedes usar el Widget como un módulo ES a través de `npm`! ¡Solo usa nuestra librería `@fintoc/fintoc-js`!

```shell theme={null}
npm install @fintoc/fintoc-js
```

¡La librería exporta un método *async* `getFintoc` que devuelve el objeto `Fintoc`!

```javascript theme={null}
import { getFintoc } from '@fintoc/fintoc-js';

// You can read more about the parameters below
const options = { ... };

const main = async () => {
  const Fintoc = await getFintoc();
  const widget = Fintoc.create(options);
  widget.open();
}

main();
```

## Métodos del objeto Widget

Una vez que se crea un objeto `widget`, puedes usar sus métodos para interactuar con él. Los métodos disponibles son `open`, `close` y `destroy`.

| Método           | Descripción                                                                                                                                                                                                               |
| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| widget.open()    | El método `open` abre el Widget cada vez que es llamado.                                                                                                                                                                  |
| widget.hide()    | El método `hide` cierra el widget cada vez que es llamado. **No destruye la instancia del widget**, solo lo oculta del usuario. Puedes llamar al método `open` después del método `hide` y el widget volverá a mostrarse. |
| widget.destroy() | El método `destroy` elimina la instancia del Widget de tu aplicación. Si quieres volver a abrir el widget después de llamar al método `destroy`, necesitarás crear otra instancia del Widget usando `Fintoc.create()`.    |

<Info>
  **Cómo usar el método `widget.destroy()`**

  Al usar `Fintoc.create(args)`, un `iframe` se embebe dentro de tu aplicación. A veces (principalmente al desarrollar una SPA), podrías necesitar eliminar este `iframe`. Esto se puede hacer usando el método `destroy`. Si luego necesitas volver a abrir el widget, necesitarás crear una nueva instancia usando el método `Fintoc.create(args)` nuevamente.
</Info>

<br />

## Cómo configurar y desplegar el widget

Dependiendo del producto que estés usando, hay distintas formas de configurar y desplegar el widget en tu frontend.

Al incluir el `script` de Fintoc en tu aplicación (o después de usar el método `getFintoc` de la librería `@fintoc/fintoc-js`), tendrás acceso a la clase `Fintoc`, que te permitirá crear conexiones con una institución financiera desde dentro de tu aplicación.

<Info>
  Nota: recuerda llamar al método `.open()` para abrir el widget.
</Info>

### Payment Initiation

```javascript Javascript theme={null}
const widget = Fintoc.create({
  product,
  publicKey,
  sessionToken,
  onSuccess,
  onExit,
  onEvent,
})
```

### Movements

```javascript Javascript theme={null}
const widget = Fintoc.create({
  holderType,
  product,
  publicKey,
  webhookUrl,
  country,
  institutionId,
  link_token,
  onSuccess,
  onExit,
  onEvent,
})
```

### Direct Debit

```javascript Javascript theme={null}
const widget = Fintoc.create({
  holderType,
  product,
  publicKey,
  country,
  institutionId,
  widgetToken,
  onSuccess,
  onExit,
  onEvent,
})
```

<br />

| Parámetro     | Tipo            | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| :------------ | :-------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| publicKey     | string          | El `publicKey` se usa para identificar tu aplicación web o página web dentro de Fintoc. Los Links creados con un `publicKey` se asignarán a la organización o usuario que es dueño de dicho `publicKey`.<br />Este token determinará si estás usando el sandbox o el entorno de producción. Recuerda que el `publicKey` del sandbox empieza con `pk_test_`, mientras que el de producción empieza con `pk_live_`.                                                              |
| holderType    | string          | El parámetro `holderType` puede ser `business` o `individual`, y determina el tipo de cuenta que se conectará a Fintoc. **Este parámetro no es requerido para el producto Payment Initiation**.                                                                                                                                                                                                                                                                                |
| product       | string          | El parámetro `product` puede ser `movements`, `subscriptions`, `invoices` o `payments`, y determina el producto y el tipo de **Link** que se creará.                                                                                                                                                                                                                                                                                                                           |
| country       | string          | El parámetro `country` debe ser el código `ISO 3166-1 alfa-2` del país al que estás intentando conectarte. Puede ser `cl` o `mx`. Por defecto es `cl`. **Este parámetro no es requerido para el producto Payment Initiation**.                                                                                                                                                                                                                                                 |
| institutionId | string          | \* \*Opcional\*\*. El parámetro `institutionId` corresponde al `id` de [una institución financiera](/es/v2023-11-15/docs/payments/overview-payment-initiation/payment-initiation-countries-and-institutions). Si se incluye, dicha institución será preseleccionada. Por ejemplo, el valor `cl_banco_estado` haría que el widget se abra con Banco Estado por defecto. Antes de preseleccionar una institución, revisa la disponibilidad usando el endpoint list institutions. |
| username      | string u object | \* \*Opcional\*\*. El `username` rellena previamente el campo username al hacer un pago.<br /><br />Los atributos del objeto username [están abajo](/es/v2023-11-15/docs/resources/widget/widget-web-integration#username-object). Si se envía un string, tomará el valor por defecto para el atributo editable.                                                                                                                                                               |
| holderId      | string u object | \* \*Opcional\*\*. El `holderId` rellena previamente el campo holderId al conectar un link en el producto \*\*`Movements`\*\*.<br />Los atributos del objeto holderId [están abajo](/es/v2023-11-15/docs/resources/widget/widget-web-integration#username-and-holderid-objects). Si se envía un string, tomará el valor por defecto para el atributo editable.<br />Solo el producto `movements` usa este parámetro.                                                           |
| sessionToken  | string          | **Solo se usa para el producto Payment Initiation**<br />El parámetro `sessionToken` corresponde al token creado por el backend al crear un [Checkout Session](https://dash.readme.com/go/fintoc?redirect=%2Fv2023-11-15%2Freference%2Fcreate-checkout-session) y se usa para desplegar y configurar el Widget.                                                                                                                                                                |
| webhookUrl    | string          | \* \*Solo se usa para los productos `movements` e `invoices`\*\*, si estás integrando `payments` o `subscriptions` no lo necesitas.<br /><br />El parámetro `webhookUrl` corresponde a la URL que recibirá una solicitud con el nuevo **Link** después de su creación exitosa, incluyendo su **link\_token**.                                                                                                                                                                  |
| widgetToken   | string          | El parámetro `widgetToken` corresponde al token creado por el backend que inicializa y configura el widget.<br /><br />Solo el producto `subscriptions` usa un parámetro `widgetToken`.                                                                                                                                                                                                                                                                                        |
| onSuccess     | function        | El parámetro `onSuccess` corresponde a un callback que será llamado después de que el flujo termine exitosamente.                                                                                                                                                                                                                                                                                                                                                              |
| onExit        | function        | El parámetro `onExit` corresponde a un callback que será llamado después de que un usuario cierra el Widget prematuramente.                                                                                                                                                                                                                                                                                                                                                    |
| onEvent       | function        | El parámetro `onEvent` corresponde a un callback que será llamado cada vez que un usuario ejecute una acción significativa en el Widget.                                                                                                                                                                                                                                                                                                                                       |

<Danger>
  **Usa los callbacks y eventos del Widget correctamente**

  **Nunca** uses los callbacks `onSuccess`, `onExit` u `onEvent` para obtener el estado del recurso que se está creando. **Solo** deberías usar estos callbacks para manejar el flujo de tu aplicación frontend **mientras esperas la confirmación del backend**, ya sea vía Webhooks o intercambiando algún exchange token. Los eventos del frontend también se pueden usar para generar métricas sobre el uso general del widget, pero **nunca** deberías depender únicamente de ellos para asumir que un recurso fue creado o falló en ser creado.
</Danger>

### Objetos Username y holderId

Para rellenar previamente un username o holderId y cambiar los valores por defecto, puedes enviar un objeto con los siguientes atributos:

```Text JSON theme={null}
username = {
  value: "123456789",
  editable: true
}

holderId = {
  value: "123456789",
  editable: true
}
```

<Info>
  **Usar la opción de pre-rellenado aumenta la conversión de pagos**

  Nuestras pruebas han mostrado que usar el pre-rellenado puede aumentar la conversión en alrededor de un 3%.
</Info>

| Atributo | Tipo   | Descripción                                                                                                                                                                                                                                                                                        |
| :------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| value    | string | El username o holderId que se pre-rellenará en el widget. Para el producto **`Payments`**, en Chile debes ingresar el RUT del usuario y en México debes ingresar el número de teléfono del usuario.<br />Al usar **`Movements`**, debes ingresar el RUT del negocio de la cuenta que se conectará. |
| editable | bool   | Si el campo es editable o no en el widget. Por defecto está en `true`.                                                                                                                                                                                                                             |
