chatwoot-develop/progresso/fluxo_pix_publico.md
2026-01-12 19:04:15 -03:00

3.2 KiB

Fluxo de Geração de PIX - Página Pública de Reservas

Este documento descreve o fluxo técnico de como o PIX é gerado quando um usuário finaliza uma reserva na página pública do Captain Book.

Visão Geral

O processo envolve a interação entre o Frontend (Vue.js), o Backend (Rails Controller) e a Integração Bancária (Inter Service).

sequenceDiagram
    participant User as Usuário (Navegador)
    participant Vue as App.vue (Frontend)
    participant Ctrl as ReservationsController
    participant Unit as Captain::Unit (DB)
    participant Service as InterService
    participant Inter as Banco Inter API

    User->>Vue: Preenche dados e clica "Confirmar"
    Vue->>Ctrl: POST /public/api/v1/captain/reservations

    Ctrl->>Unit: Busca Unit pelo ID
    Unit-->>Ctrl: Retorna Credenciais Inter (Client ID, Cert, Key)

    alt Credenciais Inter Presentes
        Ctrl->>Service: Inicializa com credenciais
        Ctrl->>Service: create_pix_charge(reservation_data)

        Service->>Inter: POST /oauth/v2/token (Auth)
        Inter-->>Service: Access Token

        Service->>Inter: POST /pix/v2/cob (Cria Cobrança)
        Inter-->>Service: JSON { txid, pixCopiaECola, location }

        Service-->>Ctrl: { success: true, pix_copy_paste, qr_code_url }
    else Credenciais Ausentes ou Falha
        Ctrl->>Ctrl: Gera Mock Response
    end

    Ctrl-->>Vue: JSON 200 OK w/ metadata.pix
    Vue->>User: Exibe Tela de Sucesso + QR Code + Copia e Cola

Detalhes dos Componentes

1. Frontend (App.vue)

  • Responsabilidade: Coletar dados do hóspede, calcular preço estimado (baseado nas regras da unidade) e enviar para o backend.
  • Ação: Ao receber a resposta de sucesso, exibe o modal de "Pagamento Seguro" com o Código "Copia e Cola" e a imagem do QR Code.

2. Controlador (ReservationsController)

  • Localização: enterprise/app/controllers/public/api/v1/captain/reservations_controller.rb
  • Lógica Principal:
    1. Recebe unit_id e dados da reserva.
    2. Verifica se a Unidade (Captain::Unit) possui credenciais do Inter configuradas (inter_client_id, inter_client_secret, etc.).
    3. Calcula o valor do PIX (atualmente 50% do valor total como sinal).
    4. Tenta gerar o PIX real via InterService.
    5. Se falhar ou não tiver config, retorna um Mock para não travar o fluxo do usuário.

3. Serviço de Integração (InterService)

  • Localização: app/services/captain/inter_service.rb
  • Autenticação: Usa certificado digital (.crt e .key) e Client Credentials para obter token OAuth.
  • Escopos: cob.write cob.read webhook.write webhook.read extrato.read.
  • Criação de Cobrança: Envia CPF, Nome e Valor para o endpoint /pix/v2/cob do Inter.
  • bypass SSL: Em ambiente de desenvolvimento, a verificação CRL estrita é ignorada para facilitar testes locais.

Como o QR Code é Exibido

O Banco Inter retorna uma string pixCopiaECola e uma URL location (que não é uma imagem direta). Para exibir o QR Code visualmente na tela, o Frontend utiliza um gerador de QR Code dinâmico (ex: api.qrserver.com) passando o valor do pixCopiaECola como parâmetro para renderizar a imagem Png.