Este artigo refere-se ao hosted widget multi-região O conteúdo deste artigo refere-se ao hosted widget multi-região (aplicável para o México). Se você deseja operar no Brasil, por favor veja nosso Connect Widget para OFDA Regulamentado. br # Introdução A Belvo oferece uma solução de Connect Widget plug-and-play, tanto para aplicações web quanto móveis, que proporciona um processo de autenticação seguro e otimizado para cada instituição. O Connect Widget é a maneira mais suave para seus usuários conectarem sua conta bancária dentro de sua aplicação. É compatível com nossos produtos de agregação: Banking, Employment e Fiscal. Se você gostaria de testar como funciona, confira nossa Demonstração do Widget. Aqui está uma prévia do Connect widget em um site de demonstração: ![](/assets/web-widget-connect-example.6112b6f17ad0496c403d3a07416e598a888914db8bb3de8d228da7899a1c3807.f1a41317.gif) ## Fluxo (Multi Região) A integração de ponta a ponta envolve seu frontend e backend. Abaixo está uma visão geral de como você pode criar links com o hosted widget. Como você pode ver, seu lado cliente e servidor estarão envolvidos no fluxo do Connect Widget. Aqui está um exemplo de ponta a ponta para ilustrar a responsabilidade de cada lado: 1. Seu usuário clica em um botão **Adicionar uma conta bancária** dentro do seu aplicativo. 2. Seu frontend chama seu backend para solicitar um `access_token` da Belvo. 3. Seu backend chama a Belvo para obter um `access_token`. 4. A Belvo retorna um `access_token` válido para seu backend. 5. Seu servidor retorna o `access_token` para seu frontend. 6. Seu frontend inicia o widget usando o `access_token`. 7. O usuário navega pelo Connect Widget e cria um link válido para sua instituição. 8. A Belvo retorna o `id` do link recém-criado via um callback de evento para seu frontend. A Belvo então começará a recuperar assincronamente os dados históricos para o link. 9. A Belvo envia um webhook para seu backend assim que os dados estiverem disponíveis para cada recurso principal. 10. Seu backend recupera os dados usando uma chamada GET, passando o `id` do link como um parâmetro de consulta. 11. A Belvo retorna as informações para seu backend e as encaminha para seu frontend. 12. Seu usuário vê seus dados financeiros dentro do seu serviço. > ❗️ Chamadas do lado do servidor Nossa API não pode ser usada diretamente do frontend. O token de acesso e qualquer outra solicitação de API que você precisar devem ser tratados a partir do seu backend (lado do servidor). br # Incorporar o snippet do Connect widget Para incorporar o código do widget em sua aplicação, adicione os seguintes elementos de código na página onde o Connect Widget deve aparecer (se você estiver trabalhando com Angular, React ou Vue, basta selecionar a aba de código relevante para você). ```html ... ... ...
... ... ... ``` ```javascript import { Component, OnInit } from '@angular/core'; // Implemente a interface OnInit para poder carregar o script @Component({ selector: 'app-root', template: `
`, styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { title = 'widget-angular'; // método implementado ngOnInit(): void { loadScript('https://cdn.belvo.io/belvo-widget-1-stable.js'); } } // Por favor, adicione o código do Passo 3 aqui. ``` ```javascript import './App.css'; import { useEffect } from "react"; function App() { useScript('https://cdn.belvo.io/belvo-widget-1-stable.js'); return (
); } export default App; // Hook function useScript(src) { useEffect( () => { // Criar script const node = document.createElement('script'); node.src = src; node.type = 'text/javascript'; node.async = true; node.onload = createWidget // Adicionar script ao corpo do documento document.body.appendChild(node); }, [src] // Reexecutar o efeito apenas se o src do script mudar ) } ``` ```html ``` > 🚧 Certifique-se de incluir a **referência** para `https://cdn.belvo.io/belvo-widget-1-stable.js`. Caso contrário, o widget não será carregado em seu app! # Gerar um `access_token` > 👍 Personalizando o `access_token` Quando você solicita seu `access_token`, pode passar parâmetros adicionais para personalizar a aparência do seu widget. Para mais informações, consulte nosso Guia de branding e personalização. > ❗️ Solicitação do lado do servidor A solicitação do `access_token` **deve** ser feita do lado do servidor para proteger suas chaves de API (secretId e secretPassword). Portanto, se você estiver usando um framework como Vue ou React, certifique-se de que a solicitação seja gerada do lado do servidor. Para que o widget apareça para seus usuários finais, você precisa gerar um `access_token` no seu lado do servidor e enviá-lo para a Belvo. Assim que recebermos a solicitação, você receberá um objeto com dois elementos: `access` e `refresh`. Passe o valor do elemento `access` para o seu lado do cliente, e você poderá iniciar o widget. Os valores retornados são válidos por **10** minutos e podem ser enviados para o seu frontend para iniciar o Connect Widget. Invalidamos o token assim que seu usuário conecta sua conta com sucesso. Para gerar um `access_token`, basta fazer uma chamada do seu lado do servidor para a Belvo (veja o exemplo abaixo): ```shell curl -X POST \ https://sandbox.belvo.com/api/token/ \ -H 'Content-Type: application/json' \ -H 'Host: sandbox.belvo.com' \ -d 'Veja o exemplo de payload abaixo' ``` ```json { "id": "SECRET_ID", "password": "SECRET_PASSWORD", "scopes": "read_institutions,write_links", "fetch_resources": ["ACCOUNTS", "TRANSACTIONS", "OWNERS"], "credentials_storage": "store", "stale_in": "300d" } ``` > 📘 Escopos Lembre-se de passar o parâmetro `scopes` ao gerar seu access token, caso contrário, o widget não iniciará corretamente. Esses escopos são necessários para dar as permissões corretas ao token para que o widget funcione. `"scopes": "read_institutions,write_links"` Após fazer sua chamada, a Belvo retorna um objeto do qual você precisará do valor da chave `access`. Você enviará esse valor para o seu lado do cliente para que o widget possa realmente iniciar. ```json { "access": "{access_token_for_widget}", // Você precisará deste valor para enviar para o seu lado do cliente "refresh": "{refresh_token}" } ``` ✳️ OK! Agora que você pode gerar `access_token`, você pode iniciar o widget! # Iniciar o hosted widget Usando este `access_token` você pode agora iniciar o hosted widget: ```javascript // Código a ser incluído dentro da sua tag ``` ## Retorno de chamada de evento Quando os usuários encontram certos eventos no widget, enviaremos alguns dados para explicar o que está acontecendo. O objeto de dados conterá um `eventName`, `request_id` e um objeto `meta_data`. ```json { "data": [ { "eventName": "ERROR", "request_id": "UUID", "meta_data": { "error_code": "login_error", "error_message": "Invalid credentials provided to login to the institution", "institution_name": "bancoazteca_mx_retail", "timestamp": "2020-04-27T19:09:23.918Z" } } ] } ``` ```json { "data": [ { "eventName": "WARNING", "request_id": "UUID", "meta_data": { "warning_code": "institution_disabled", "warning_message": "The institution is temporarily unavailable.", "institution_name": "bancoazteca_mx_retail", "timestamp": "2020-04-27T19:09:23.918Z" } } ] } ``` ```json { "data": [ { "eventName": "PAGE_LOAD", "meta_data": { "page": "/institutions", // Página para a qual o usuário é direcionado "from": "/consent", // Página onde o usuário estava anteriormente "institution_name": "" // Nota: Este campo só aparece DEPOIS que eles selecionaram uma instituição } } ] } ``` **event_name** Uma string que representa o nome do evento que acabou de ocorrer no widget. | Tipo de evento | Descrição | | --- | --- | | `ERROR` | Quando um erro recuperável ocorreu no widget, veja o `error_code` e `error_message` no `meta_data`. | | `WARNING` | Quando um usuário tenta se conectar a uma instituição que está atualmente indisponível. Veja o `warning_code` e `warning_message` no `meta_data` para mais informações. | | `PAGE_LOAD` | Quando um usuário avança para a próxima tela no widget. | **request_id** Uma string usada para identificar exclusivamente o erro. > 🚧 Armazene o request_id Ao implementar sua integração Belvo, certifique-se de considerar o armazenamento do request_id quando você receber um erro. Desta forma, quando você fornecer o ID aos nossos engenheiros, eles poderão solucionar o problema rapidamente e fazer com que você volte a funcionar. **meta_data** Um objeto contendo mais informações sobre o evento que acabou de ocorrer no widget. O objeto `meta_data` pode ter as seguintes propriedades: | Parâmetro | Descrição | | --- | --- | | `error_code` | O código de erro que o usuário encontrou. Veja o retorno de chamada de saída para a lista de possíveis códigos de erro. | | `error_message` | A mensagem de erro que o usuário encontrou. Veja o retorno de chamada de saída para a lista de possíveis mensagens de erro. | | `institution_name` | A instituição selecionada | | `timestamp` | Um timestamp de quando o evento ocorreu | ```html ``` ## Callback de saída Quando os usuários decidirem fechar o widget, enviaremos alguns dados para explicar o que está acontecendo. O objeto de dados conterá um objeto `last_encountered_error` e um objeto `meta_data`. > 👍 Caso de uso no mundo real Monitorar o callback de saída é útil, pois com base no evento, você pode redirecionar seu usuário para uma tela específica após eles fecharem o widget. ```json { "data": [ { "last_encountered_error": { "message": "Invalid credentials provided to login to the institution", "code": "login_error" }, "meta_data": { "institution_name": "erebor_mx_retail", "step": "abandon-survey" } } ] } ``` **last_encountered_error** O objeto `last_encountered_error` é enviado apenas se ocorrer um erro. Veja a tabela abaixo para uma lista de possíveis códigos de erro e suas mensagens. | Código de erro | Mensagem de erro | | --- | --- | | `institution_down` | A instituição financeira está fora do ar, tente novamente mais tarde | | `login_error` | As possíveis mensagens de erro para um login_error são: - Credenciais inválidas fornecidas para login na instituição A conta do usuário está bloqueada, o usuário precisa contatar a instituição para desbloqueá-la O acesso à conta do usuário foi proibido pela instituição Impossível fazer login, algo inesperado aconteceu ao fazer login na instituição. Tente novamente mais tarde. Um token MFA é necessário pela instituição, mas ainda não é suportado pela Belvo. Login não tentado devido a credenciais inválidas Credenciais ausentes para login na instituição | | `too_many_sessions` | Impossível fazer login, uma sessão já está aberta com a instituição para essas credenciais | | `unexpected_error` | A Belvo não consegue processar a solicitação devido a um problema interno do sistema ou a uma resposta não suportada de uma instituição | **meta_data** O objeto `meta_data` é enviado sempre que um usuário sai do widget. Veja a tabela abaixo para uma lista de possíveis valores. | Parâmetro | Descrição | | --- | --- | | `step` | Enviado quando o usuário sai do widget na tela inicial. O valor do parâmetro é sempre `abandon-survey`. | | `institution_name` | Enviado quando o usuário sai do widget após selecionar uma instituição. O valor será o código da instituição da Belvo, por exemplo, `banamex_mx_retail`. | Aqui está um exemplo de uso do onExit: ```html ``` # Use o `link_id` para obter dados Uma vez que seu usuário conecta com sucesso sua conta bancária, você receberá o `link_id` no evento de sucesso. A Belvo então enviará webhooks informando quando a informação estiver pronta para o link. Para mais informações, veja: - Workflows Assíncronos (Links Únicos) - Workflows Assíncronos (Links Recorrentes) br # Modo de atualização do widget Connect O widget Connect pode ser configurado no “modo de atualização” para restaurar um link que parou de funcionar temporariamente porque: - a senha conectada com o Link foi alterada pelo usuário - um novo token MFA é necessário Para mais informações, consulte nosso guia para Atualizar um link usando o widget Connect.