Skip to main content

Visão geral

A integração ClearPago envolve três camadas principais: o seu sistema, a plataforma ClearPago e o parceiro BaaS. Cada camada tem responsabilidades bem definidas.

Responsabilidades por camada

Seu sistema

ComponenteResponsabilidade
Cliente HTTPChama POST e GET na API REST. Inclui Authorization, Content-Type e X-Correlation-ID.
Endpoint de webhookRecebe POST com Digital-Signature, valida a assinatura e responde 2xx rapidamente.
Banco de dadosPersiste id, externalId, transactionId, endToEndId e status de cada recurso.

Plataforma ClearPago

ComponenteResponsabilidade
API RESTValida, cria e persiste recursos Pix. Faz despacho inicial ao BaaS em operações de cash-out.
Webhooks de entradaRecebe eventos CashIn, CashOut, CashInReversal, CashOutReversal do parceiro. Não são implementados pelo integrador.
Fila de eventosDesacopla recebimento de eventos do processamento. Garante durabilidade.
WorkersAplicam transições de status, gravam ledger e enfileiram notificações ao comerciante.
OutboxGarante entrega durável de notificações ao comerciante com retry e backoff.
ReconciliaçãoConsulta o BaaS periodicamente em estados intermediários ou ambíguos (PROVIDER_RESULT_UNKNOWN, RECONCILIATION_REQUIRED).

Parceiro BaaS

ComponenteResponsabilidade
Pix / LiquidaçãoProcessa pagamentos Pix, confirma ou rejeita, emite eventos de resultado.

Fluxo de um cash-in

  1. Seu sistema chama POST /api/pix/cash-in → plataforma retorna 201 com id, status: PENDING e pixCode.
  2. O pagador escaneia o QR e liquida no BaaS.
  3. O BaaS notifica a plataforma via POST /api/webhooks/pix/cash-in (interno).
  4. Worker transiciona o status para PAID, grava lançamento no ledger, enfileira notificação ao comerciante.
  5. Outbox entrega POST com event_type: pix_cash_in e Digital-Signature ao seu endpoint.
  6. Você valida a assinatura e executa a lógica de negócio (ex.: liberar pedido).

Fluxo de um cash-out

  1. POST /api/pix/cash-out → reserva criada, estado inicial.
  2. Plataforma despacha para o BaaS; resultado pode ser imediato ou assíncrono.
  3. Resposta ambígua (timeout, 5xx) → estado PROVIDER_RESULT_UNKNOWN → reconciliação resolve.
  4. BaaS confirma → CONFIRMED; BaaS falha → FAILED e reserva liberada.
  5. Comerciante recebe pix_cash_out com resultado final.

Modelo de entrega de notificações

Tipo de operaçãoCanal de notificaçãoLatência esperada
Cash-in, refund-inOutbox (durável, commit-first)Baixa a moderada
Cash-out, reversãoPool de goroutines + fallback SQSGeralmente baixa; SQS em alta carga
Não conte com ordem garantida entre eventos de canais diferentes. Deduplicação e ordenação por identificadores de negócio são sua responsabilidade.

Implicações para o integrador

  • Não trate o POST de criação como terminal. O status retornado é o estado no momento do commit; o estado final chega via webhook ou consulta.
  • Implemente idempotência. Webhooks podem reentrar; seu handler deve ser seguro para execução múltipla.
  • Persista id cedo. Antes de qualquer lógica de negócio, grave o UUID retornado.
  • Monitore estados ambíguos. PROVIDER_RESULT_UNKNOWN e RECONCILIATION_REQUIRED não são terminais — monitore a idade e consulte via GET antes de escalar.

Referências