Plano de Testes - Integração ASAAS
Guia passo a passo para testar checkout recorrente e emissão de notas fiscais
→ Você PRECISA configurar a variável ASAAS_API_KEY primeiro!
PASSO A PASSO OBRIGATÓRIO:
1️⃣ Obter a API Key do ASAAS Sandbox:
• Acesse: https://sandbox.asaas.com/
• Faça login (crie conta se não tiver)
• Vá em: Integrações → Webhooks
• Copie a API Key (formato: $aact_XXX...)
2️⃣ Configurar no Dashboard Base44:
• Clique no botão "⚙️" no canto superior direito
• Vá em Settings → Environment Variables
• Clique em "+ Add Variable"
• Nome:
ASAAS_API_KEY• Valor:
Cole sua API Key aqui• Clique em "Save"
• Aguarde 10-20 segundos para o deploy
❌ SEM ESSA CONFIGURAÇÃO, NENHUM TESTE VAI FUNCIONAR!
📍 Ambiente: https://api-sandbox.asaas.com/v3
📊 Painel de Testes: https://sandbox.asaas.com/
Configuração Inicial
Confirme que a configuração do ASAAS está ativa no banco de dados
Passos:
- •Acesse o painel administrativo
- •Verifique na entidade AsaasConfig se existe um registro ativo
- •Confirme que environment = 'sandbox'
- •Verifique se api_key está preenchida
Código:
// No console do navegador ou via API:
const config = await base44.entities.AsaasConfig.list();
console.log(config);✓ Resultado Esperado:
Deve retornar 1 registro com is_active=true e environment='sandbox'
Teste de Integração
Teste a criação de um cliente (customer) no ASAAS via API
Passos:
- •Use a função asaas_create_customer
- •Envie os dados do cliente conforme o payload
- •O ASAAS retornará um customer ID (ex: cus_000005821234)
- •Guarde esse ID para os próximos testes
Código:
const result = await base44.functions.invoke('asaas_create_customer', {
name: "João da Silva Teste",
email: "joao.teste@email.com",
cpfCnpj: "12345678909",
phone: "4733334444",
mobilePhone: "47999998888",
address: "Rua das Flores",
addressNumber: "123",
complement: "Apto 101",
province: "Centro",
postalCode: "89000000"
});
console.log(result.data);Payload de Teste:
{
"name": "João da Silva Teste",
"email": "joao.teste@email.com",
"cpfCnpj": "12345678909",
"phone": "4733334444",
"mobilePhone": "47999998888",
"address": "Rua das Flores",
"addressNumber": "123",
"complement": "Apto 101",
"province": "Centro",
"postalCode": "89000000"
}✓ Resultado Esperado:
Retorno com id do cliente (cus_XXXX), status 200
Crie uma assinatura recorrente mensal no ASAAS
Passos:
- •Use o customer ID do teste anterior
- •Defina billingType como BOLETO ou CREDIT_CARD
- •Defina value (ex: 19.90 para plano básico)
- •Defina nextDueDate (próxima data de vencimento)
- •Defina cycle como MONTHLY
- •O ASAAS retornará subscription ID (ex: sub_XXXX)
Código:
const result = await base44.functions.invoke('asaas_create_subscription', {
customer: "cus_000005821234", // SUBSTITUIR pelo ID do passo anterior
billingType: "BOLETO",
value: 19.90,
nextDueDate: "2025-02-01",
cycle: "MONTHLY",
description: "Assinatura Plano Básico - ServiçoPro",
externalReference: "PROF_123"
});
console.log(result.data);✓ Resultado Esperado:
Retorno com id da assinatura (sub_XXXX), status ACTIVE
Crie um checkout hospedado pelo ASAAS com assinatura recorrente
Passos:
- •Esta é a forma MAIS SIMPLES de receber pagamentos recorrentes
- •O ASAAS cria automaticamente o cliente E a assinatura
- •Retorna um link de checkout pronto
- •Cliente preenche dados do cartão diretamente no ASAAS (mais seguro)
Código:
const result = await base44.functions.invoke('asaas_create_checkout', {
billingTypes: ["CREDIT_CARD"],
chargeTypes: ["RECURRENT"],
minutesToExpire: 1440,
callback: {
cancelUrl: "https://servicopro.online/cancelado",
expiredUrl: "https://servicopro.online/expirado",
successUrl: "https://servicopro.online/sucesso"
},
items: [{
name: "Plano Profissional",
description: "Assinatura mensal do Plano Profissional",
quantity: 1,
value: 29.90
}],
customerData: {
name: "Maria Teste",
cpfCnpj: "98765432100",
email: "maria@teste.com",
phone: "47988887777",
address: "Av. Brasil",
addressNumber: "500",
province: "Centro",
postalCode: "89223005"
},
subscription: {
cycle: "MONTHLY",
nextDueDate: "2025-02-01"
}
});
console.log('Link do checkout:', result.data.checkoutUrl);✓ Resultado Esperado:
Retorno com checkoutUrl para redirecionar o cliente
Teste de Pagamento
No ambiente sandbox, você pode simular pagamentos manualmente
Passos:
- •Acesse https://sandbox.asaas.com/
- •Faça login na conta de testes
- •Vá em Cobranças > Listar cobranças
- •Encontre a cobrança criada
- •Clique em 'Confirmar pagamento' (botão de teste do sandbox)
- •A cobrança mudará para status RECEIVED
✓ Resultado Esperado:
Cobrança marcada como paga no painel ASAAS
Teste de Webhook
Configure o webhook para receber notificações de pagamentos
Passos:
- •Acesse https://sandbox.asaas.com/
- •Vá em Integrações > Webhooks
- •Configure a URL do webhook: [URL_DA_SUA_APP]/api/asaas_webhook
- •Selecione os eventos: PAYMENT_CREATED, PAYMENT_RECEIVED, PAYMENT_CONFIRMED
- •Salve a configuração
Código:
// A URL do webhook será algo como:
https://sua-app.base44.app/api/asaas_webhook
// Para testar localmente, use um túnel como ngrok✓ Resultado Esperado:
Webhook configurado e ativo no painel ASAAS
Confirme que os webhooks estão sendo recebidos e processados
Passos:
- •Simule um pagamento no sandbox (passo 5)
- •O ASAAS enviará webhook para sua função
- •Verifique os logs da função asaas_webhook
- •Confirme que foi criado/atualizado registro em AsaasPayment
- •Verifique se o status do profissional foi atualizado
Código:
// Verificar pagamentos criados:
const payments = await base44.entities.AsaasPayment.list();
console.log(payments);
// Verificar logs da função:
// Dashboard > Code > Functions > asaas_webhook > Logs✓ Resultado Esperado:
Registro criado na entidade AsaasPayment com status atualizado
Teste de Nota Fiscal
Configure os dados fiscais da empresa no ASAAS - AGUARDANDO CADASTRO MUNICIPAL
Passos:
- •⏸️ PAUSADO: Depende de cadastro municipal na prefeitura local
- •Acesse https://sandbox.asaas.com/
- •Vá em Minha Conta > Informações Fiscais
- •Preencha os dados da empresa (pode usar dados fictícios no sandbox):
- • - Email fiscal
- • - Inscrição Municipal
- • - CNAE
- • - RPS Série e Número
- • - Usuário e senha da prefeitura (sandbox aceita qualquer valor)
- •Salve as configurações
✓ Resultado Esperado:
Configurações fiscais salvas com sucesso
Ative a emissão automática de notas fiscais para uma assinatura - AGUARDANDO CADASTRO MUNICIPAL
Passos:
- •Use a API do ASAAS: POST /v3/subscriptions/{id}/invoiceSettings
- •Configure effectiveDatePeriod como ON_PAYMENT_CONFIRMATION
- •Defina o serviço municipal (municipalServiceId ou municipalServiceCode)
- •Configure os impostos (ISS, COFINS, CSLL, etc.)
Código:
// Exemplo de configuração via função:
const result = await base44.functions.invoke('asaas_configure_invoice', {
subscriptionId: "sub_XXXX", // Substituir pelo ID da assinatura criada no step 3 ou 4
config: {
municipalServiceCode: "1.01",
municipalServiceName: "Análise e desenvolvimento de sistemas",
effectiveDatePeriod: "ON_PAYMENT_CONFIRMATION",
receivedOnly: false,
taxes: {
retainIss: false,
iss: 3,
cofins: 3,
csll: 1,
inss: 0,
ir: 1.5,
pis: 0.65
}
}
});✓ Resultado Esperado:
Configuração de NF criada para a assinatura
Teste Completo
Teste o fluxo completo de cadastro e pagamento de um novo profissional
Passos:
- 1. Profissional se cadastra no app (RegisterProfessional)
- 2. Escolhe um plano (Básico, Profissional ou Premium)
- 3. Sistema cria checkout via asaas_create_checkout
- 4. Profissional é redirecionado para link do checkout
- 5. Profissional preenche dados do cartão no ASAAS
- 6. ASAAS cria cliente + assinatura automaticamente
- 7. ASAAS envia webhook PAYMENT_CREATED
- 8. Nossa função asaas_webhook cria registro em AsaasSubscription e AsaasPayment
- 9. No vencimento, ASAAS cobra automaticamente o cartão
- 10. ASAAS envia webhook PAYMENT_RECEIVED
- 11. Nossa função atualiza status do profissional para 'active'
- 12. ASAAS emite nota fiscal automaticamente (se configurado)
✓ Resultado Esperado:
Profissional com assinatura ativa e pagamentos sendo processados automaticamente
Validações
Confirme que todos os dados estão sincronizados corretamente - TESTADO E VALIDADO
Passos:
- •✅ VALIDADO: Webhook asaas_webhook funciona corretamente
- •✅ VALIDADO: AsaasSubscription é criada automaticamente com asaas_subscription_id
- •✅ VALIDADO: AsaasPayment é criada/atualizada com eventos PAYMENT_RECEIVED/PAYMENT_CONFIRMED
- •✅ VALIDADO: Professional.subscription_status muda para 'active' após pagamento confirmado
- •✅ VALIDADO: Subscription.status muda para 'active' após pagamento confirmado
- •📝 NOTA: Função usa valores em inglês ('active') conforme schema das entidades
Código:
// Verificar assinaturas ASAAS:
const asaasSubs = await base44.entities.AsaasSubscription.list();
console.log('Assinaturas ASAAS:', asaasSubs);
// Verificar pagamentos ASAAS:
const asaasPayments = await base44.entities.AsaasPayment.list();
console.log('Pagamentos ASAAS:', asaasPayments);
// Verificar profissionais ativos:
const activeProfessionals = await base44.entities.Professional.filter({
subscription_status: 'active'
});
console.log('Profissionais ativos:', activeProfessionals);
// ✅ TESTADO: Webhook ativa assinatura corretamente ao receber pagamento✓ Resultado Esperado:
✅ VALIDADO: Todos os dados sincronizados e consistentes. Webhook ativa assinatura automaticamente.
Testes de Cenários
Simule a renovação automática da assinatura gerando as próximas cobranças
Passos:
- •Informe o ID de uma assinatura ASAAS existente (ex: sub_XXXX)
- •Clique em 'Executar Teste' para gerar o carnê do próximo mês
- •O sistema fará GET /v3/subscriptions/{id}/paymentBook para o próximo mês
- •Isso criará as próximas cobranças automaticamente no ASAAS
- •O ASAAS enviará webhooks PAYMENT_CREATED para cada cobrança gerada
- •Verifique os logs da função asaas_webhook
- •Confirme que novos registros foram criados em AsaasPayment
Código:
// O teste fará automaticamente:
const nextMonth = new Date();
nextMonth.setMonth(nextMonth.getMonth() + 1);
const month = nextMonth.getMonth() + 1;
const year = nextMonth.getFullYear();
const response = await fetch(
`https://api-sandbox.asaas.com/v3/subscriptions/${subscriptionId}/paymentBook?month=${month}&year=${year}`,
{
method: 'GET',
headers: {
'accept': 'application/json',
'access_token': ASAAS_API_KEY
}
}
);✓ Resultado Esperado:
Nova cobrança criada automaticamente no mês seguinte e sincronizada via webhook
Simule um profissional que não pagou a mensalidade
Passos:
- •Este teste verifica se existem pagamentos vencidos (OVERDUE)
- •Lista todos os pagamentos ASAAS do banco de dados
- •Mostra pagamentos com status PENDING que já passaram da data de vencimento
- •No sandbox, você pode simular: criar cobrança > deixar vencer sem pagar
- •O ASAAS enviará webhook PAYMENT_OVERDUE automaticamente
Código:
// Verificar pagamentos em atraso:
const payments = await base44.entities.AsaasPayment.filter({
status: 'OVERDUE'
});
console.log('Pagamentos em atraso:', payments);
// Verificar profissionais com assinatura vencida:
const subs = await base44.entities.AsaasSubscription.filter({
status: 'OVERDUE'
});✓ Resultado Esperado:
Sistema detecta inadimplência e webhook PAYMENT_OVERDUE é recebido
Teste o cancelamento de uma assinatura
Passos:
- •Informe o ID de uma assinatura ASAAS existente
- •O sistema chamará a API do ASAAS para cancelar a assinatura
- •A assinatura mudará para status CANCELED
- •Novas cobranças não serão mais geradas automaticamente
- •O sistema atualizará o status no banco de dados
Código:
const result = await base44.functions.invoke('asaas_cancel_subscription', {
subscriptionId: "sub_XXXX" // Substituir pelo ID real
});
console.log(result.data);✓ Resultado Esperado:
Assinatura cancelada, status = CANCELED no ASAAS
Validações Finais
Validações de segurança antes de ir para produção
Passos:
- •✓ API Key está armazenada como secret (não no código)
- •✓ Webhooks validam autenticidade (usar webhook token)
- •✓ Funções backend usam createClientFromRequest
- •✓ Nunca expor API Key no frontend
- •✓ Configurar whitelist de IPs no ASAAS (opcional)
- •✓ Testar todos os eventos de webhook
- •✓ Implementar logs de auditoria
- •✓ Configurar notificações de erro
✓ Resultado Esperado:
Todos os itens de segurança verificados
Migração para Produção
Passos para migrar para ambiente de produção
Passos:
- 1. Criar conta ASAAS de produção em https://www.asaas.com/
- 2. Completar verificação de conta (enviar documentos reais)
- 3. Gerar nova API Key de produção
- 4. Atualizar secret ASAAS_API_KEY com chave de produção
- 5. Atualizar baseUrl nas funções: 'https://api.asaas.com/v3'
- 6. Configurar dados fiscais reais da empresa
- 7. Testar em produção com valores pequenos primeiro
- 8. Configurar webhook em produção
- 9. Monitorar logs nas primeiras semanas
- 10. Criar registro em AsaasConfig com environment='production'
✓ Resultado Esperado:
Sistema funcionando em produção com pagamentos reais
💡 Dúvidas? Entre em contato: integracoes@asaas.com.br
📚 Documentação completa: https://docs.asaas.com/
