Integracao Asaas — Guia Completo
O Asaas e o gateway de pagamento da plataforma. Cada nucleo configura seu proprio Asaas — API Key, webhook token e ambiente sao independentes por nucleo.
1. Como Obter a API Key do Asaas
O administrador do nucleo precisa de uma conta no Asaas:
- Acesse
sandbox.asaas.com(testes) ouasaas.com(producao) e crie/acesse sua conta - Clique no icone de engrenagem (canto inferior esquerdo) → Configuracoes da Conta
- No menu lateral, clique em Integracao
- Na aba Chaves de API, clique em Gerar nova chave
- Copie a chave (formato
$aact_...) - Na plataforma, va em Configuracoes → cole no campo API Key Asaas
2. Como Configurar o Webhook
O webhook permite que o Asaas notifique a plataforma quando um pagamento e confirmado, atrasado ou estornado.
- No Asaas, va em Configuracoes da Conta → Integracao
- Clique na aba Webhooks → Adicionar
- Cole a URL do webhook:
https://mbles-api-541511987434.us-east1.run.app/api/webhooks/asaas - Selecione os eventos:
PAYMENT_CONFIRMED— pagamento confirmadoPAYMENT_RECEIVED— pagamento recebidoPAYMENT_OVERDUE— pagamento atrasadoPAYMENT_REFUNDED— estornoPAYMENT_DELETED— cancelado
- Clique em Salvar — o Asaas gera um Access Token automaticamente
- Copie esse token e cole no campo Webhook Token Asaas nas configuracoes do nucleo
Importante: URL do Webhook e Dominios
A URL do webhook e sempre a mesma, independente do dominio do nucleo. Todos os nucleos usam:
https://mbles-api-541511987434.us-east1.run.app/api/webhooks/asaasO webhook aponta para a API (backend), nao para o frontend. Por isso, trocar o dominio do nucleo nao afeta os pagamentos. Cada nucleo e identificado pelo seu proprio Access Token do webhook.
Validacao per-Nucleo
O sistema valida o webhook token por nucleo (nao globalmente):
Asaas envia webhook
│
├── Body contem payment.id (ID do pagamento no Asaas)
│
▼
Service busca pagamento no banco pelo asaas_payment_id
│
├── Encontrou? → pega nucleo_id do pagamento
│ → busca asaas_webhook_token do nucleo
│ → valida header "asaas-access-token" contra token do nucleo
│ → se invalido: 401 Unauthorized
│
└── Nao encontrou? → verifica se algum nucleo tem esse token
→ se nenhum tem: 401 Unauthorized3. Ambiente: Sandbox vs Production
| Sandbox | Production |
|---|---|
Conta em sandbox.asaas.com | Conta em asaas.com |
API: https://sandbox.asaas.com/api/v3 | API: https://api.asaas.com/v3 |
| Pagamentos simulados | Pagamentos reais |
| Para testes e desenvolvimento | Para producao |
O admin alterna entre sandbox e production no campo Ambiente das configuracoes do nucleo. Cada ambiente requer sua propria API Key e Webhook Token.
4. Configuracao na Plataforma
Em Configuracoes (menu lateral), o admin preenche:
| Campo | O que e | Onde obter |
|---|---|---|
| API Key Asaas | Chave de autenticacao da API | Asaas → Integracao → Chaves de API |
| Ambiente | Sandbox ou Production | Definido pelo admin |
| Max Parcelas Cartao | Maximo de parcelas na loja (1-12) | Definido pelo admin |
| Webhook Token | Token de validacao do webhook | Asaas → Integracao → Webhooks → Access Token |
5. Customer (Cliente Asaas)
Criado automaticamente no primeiro pagamento do membro. Usa CPF para buscar/criar. Salvo em usuarios.asaas_customer_id.
6. Metodos de Pagamento
| Metodo | Como funciona |
|---|---|
| PIX | QR Code gerado instantaneamente. Membro copia codigo ou escaneia. |
| Cartao de Credito | Redirecionado para pagina Asaas. Suporta parcelamento. |
| Cartao de Debito | Pagamento instantaneo. |
| Boleto | Gerado com vencimento em 3 dias. |
7. Split Payment (CC + R$)
O membro pode pagar parte com moedas virtuais e parte com R$:
Exemplo: Produto custa 5000 CC / R$50
Membro seleciona: 3000 CC + R$20 via PIX
Calculo:
proporcaoCC = 3000 / 5000 = 0.6 (60%)
valorReal = R$50 * (1 - 0.6) = R$20
Sistema:
1. Debita 3000 CC (imediato se 100% CC, ou via webhook se mix)
2. Gera cobranca Asaas de R$20
3. Webhook confirma → pedido avanca8. Parcelamento
O admin define o maximo de parcelas por nucleo (nucleos.max_parcelas_cartao). Aplica a compras na loja com cartao de credito. Assinaturas nao parcelam.
9. Fluxo: Compra na Loja
Membro clica "Comprar"
│
├── 100% CC?
│ SIM → debita CC → pedido PENDENTE
│
└── Tem R$?
│
▼
Gera cobranca Asaas (PIX/Cartao/Boleto)
Pedido fica AGUARDANDO_PAGAMENTO
│
▼
Webhook PAYMENT_CONFIRMED
│
├── Valida token per-nucleo
├── Debita CC parciais (se mix)
└── Pedido avanca para PENDENTE
│
▼
Admin: SEPARADO → ENTREGUE10. Fluxo: Assinatura de Plano
Membro escolhe plano + ciclo (mensal/anual)
│
├── 100% CC?
│ SIM → debita CC → plano ativo imediato
│
└── Tem R$?
│
▼
Gera cobranca Asaas
Assinatura fica PENDENTE
│
▼
Webhook PAYMENT_CONFIRMED
│
├── Valida token per-nucleo
├── Debita CC parciais
└── Ativa plano do usuario
(plano_id + data_validade_plano)11. Fluxo: Doacao
Membro seleciona valor (livre ou sugerido)
│
├── 100% CC? → debita CC → doacao confirmada
│
└── R$? → cobranca Asaas → webhook confirma12. Cupons de Desconto
Admin cria cupons (% ou valor fixo). Aplicados apenas na loja. O sistema valida: ativo, nao expirado, uso nao atingido. Desconto aplicado antes do split payment.
13. Arquitetura Tecnica
| Componente | Arquivo | Funcao |
|---|---|---|
| AsaasClient | asaas.client.ts | Busca config per-nucleo do banco. Chama API Asaas. |
| PagamentosService | pagamentos.service.ts | Cria cobranças, processa webhooks, valida tokens. |
| WebhookController | pagamentos.controller.ts | Recebe POST /api/webhooks/asaas. |
| TenantInterceptor | tenant.interceptor.ts | Rota /api/webhooks/* e publica (sem nucleo no JWT). |
| Configuracoes | configuracoes/page.tsx | UI para admin configurar API Key, token, ambiente. |
14. Tabela de Migrations Relacionadas
| Migration | O que faz |
|---|---|
| 00002 | Tabela pagamentos, enums pagamento, campos split em pedidos |
| 00010 | Cupons, doacoes, planos por nucleo, parcelas, config Asaas por nucleo (asaas_api_key, asaas_environment, asaas_webhook_token, max_parcelas_cartao) |