Este repositório contém três implementações do mesmo serviço de integração com a API do Asaas (Go, TypeScript e PHP), com cadastro de clientes, cobranças, assinaturas, emissão de notas fiscais e tratamento de webhooks.
golang/: serviço HTTP em Go.typescript/: serviço HTTP em Node.js/Express (TypeScript).php/: serviço HTTP em PHP.docker-compose.yml: PostgreSQL para desenvolvimento local.
- PostgreSQL acessível via
DATABASE_URL(oudocker-compose). - Go 1.22 (para
golang/). - Node.js e npm (para
typescript/). - PHP 8.1+ com Composer e extensões
curlepdo_pgsql(paraphp/).
Variáveis de ambiente usadas nas três implementações:
DATABASE_URL: string de conexão PostgreSQL.PORT: porta HTTP do serviço (padrão8080).ASAAS_API_TOKEN: token de API do Asaas.ASAAS_WEBHOOK_TOKEN: token esperado no headerasaas-access-tokendos webhooks.
Variável específica:
ASAAS_API_URL: obrigatória emgolang/ephp/; opcional emtypescript/(padrãohttps://sandbox.asaas.com/api/v3).
Arquivos .env:
- Em
golang/, o arquivo.envprecisa existir (a inicialização falha se o arquivo não for encontrado). - Em
typescript/, o.envé carregado se existir. - Em
php/, o.envé carregado se existir emphp/.envou na raiz do repositório.
Se precisar de banco local:
docker-compose up -dcd golang
go run .cd typescript
npm install
npm run devPara produção em TypeScript:
npm run build
npm startcd php
composer install
php -S 0.0.0.0:${PORT:-8080} -t publicAs três implementações usam IDs locais (UUID) como externalReference no Asaas e persistem os dados no PostgreSQL.
Os parâmetros id e customer referenciam o ID local (externalReference), não o ID interno do Asaas.
POST /customersGET /customers?id=<id_local>POST /paymentsGET /payments?id=<id_local>POST /subscriptionsPOST /subscriptions/cancel?id=<id_local>POST /invoicesGET /invoices?id=<id_local>POST /webhooks/asaas
POST /customersGET /customers?id=<id_local>POST /paymentsGET /payments?id=<id_local>ouGET /payments?customer=<id_local>POST /subscriptionsGET /subscriptions?id=<id_local>ouGET /subscriptions?customer=<id_local>POST /invoicesGET /invoices?id=<id_local>ouGET /invoices?customer=<id_local>POST /subscriptions/cancelretorna501(não implementado).POST /webhooks/asaas
POST /customersGET /customers?id=<id_local>POST /paymentsGET /payments?id=<id_local>POST /subscriptionsPOST /subscriptions/cancel?id=<id_local>POST /invoicesGET /invoices?id=<id_local>POST /webhooks/asaas
- A rota
/webhooks/asaasaceita apenasPOSTe exige o headerasaas-access-tokenigual aASAAS_WEBHOOK_TOKEN. - Eventos
PAYMENT_CREATEDoriginados de assinaturas criam pagamentos locais quando necessário. - Eventos de pagamento recebido/confirmado/atrasado atualizam o status local e disparam emissão de nota fiscal se ainda não existir.
A documentação OpenAPI está disponível em /swagger/ quando o servidor está rodando (arquivos em golang/swagger, typescript/swagger ou php/swagger, dependendo da implementação).