Automatizar cobranças nunca foi simples. Entre regras bancárias, vencimentos, Pix, boletos registrados, notificações, inadimplência e conciliação, a maioria dos sistemas acaba virando um emaranhado de scripts difíceis de manter.
Neste artigo, vou mostrar como funciona, na prática, um sistema real de cobrança construído em Laravel, integrando Boleto e Pix do Banco Inter, com webhooks, PDFs, crons, Docker, e-mails, WhatsApp, SMS e até ligações automáticas.
Todo o conteúdo é baseado em um projeto open source real, usado em produção, disponível no GitHub:
👉 Repositório:
https://github.com/leonardop21/boleto-inter-free
Importante: este não é um “tutorial de Hello World”. É um guia técnico completo, voltado para quem quer entender arquitetura, evitar erros comuns e colocar cobrança automática em produção com segurança.
O Banco Inter oferece uma API robusta para PJ, com suporte nativo a:
Ao integrar diretamente com o Inter, você elimina intermediários, reduz custos e ganha controle total sobre o fluxo financeiro.
Mas isso vem com desafios:
É exatamente isso que o projeto resolve.
Antes de entrar em código, é importante entender como o sistema foi pensado.
Nada aqui é experimental. Tudo foi pensado para rodar 24/7, com falhas previsíveis e logs rastreáveis.
Um erro comum em sistemas de cobrança é consultar a API do banco o tempo todo.
Esse projeto evita isso usando cache agressivo com tags, por exemplo:
Quando um boleto muda de status (via webhook), o cache relacionado é invalidado.
👉 Sem Redis (ou Memcached), o sistema não funciona corretamente.
git clone https://github.com/leonardop21/boleto-inter-free.git
cd boleto-inter-free
composer install
cp .env.example .env
php artisan key:generate
No .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=boleto_inter
DB_USERNAME=user
DB_PASSWORD=pass
CACHE_DRIVER=redis
SESSION_DRIVER=redis
TIME_CACHE_IN_SECONDS=604800
Depois:
php artisan migrate
O sistema foi pensado para cobrança recorrente, mas funciona também para cobranças pontuais.
O fluxo é simples:
O Inter exige:
.crt.keyNo .env:
INTER_PATH_CRT=/caminho/inter.crt
INTER_PATH_KEY=/caminho/inter.key
INTER_CLIENT_ID=seu_client_id
INTER_CLIENT_SECRET=seu_client_secret
INTER_CLIENT_SCOPE="extrato.read boleto-cobranca.read boleto-cobranca.write"
INTER_BASE_URL="https://cdpj.partners.bancointer.com.br/"
Sem isso, nenhuma requisição funciona.
O sistema registra dois webhooks no Inter:
INTER_WEBHOOK_URL=https://seusite.com/api/inter/webhook/boleto
INTER_WEBHOOK_URL_PIX=https://seusite.com/api/inter/webhook/pix
Isso evita:
Este é um dos pontos mais sofisticados do projeto.
Comando:
php artisan ln:auto_generate_boleto
Tudo isso roda sem intervenção humana.
Comando:
php artisan ln:auto_generate_pix
O sistema envia:
Configuração SMTP no .env:
MAIL_HOST=
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
Além disso, o layout do e-mail é personalizável:
Integração direta com a API do Notifish.
NOTIFISH_BASE_URL=https://seu.notifish.com/api/v2/
NOTIFISH_API_KEY=sua_key
NOTIFISH_UUID=sua_instancia
O sistema gera uma URL assinada temporária para o PDF do boleto, válida por poucos minutos — sem expor IDs internos.
php artisan ln:send-boleto-sms
php artisan ln:send-pix-sms
php artisan ln:send-boleto-voicer
php artisan ln:send-pix-voicer
Isso é usado somente após o vencimento, como camada extra de cobrança.
Você não agenda cada comando individualmente.
Apenas:
* * * * * php artisan schedule:run
O Laravel Scheduler cuida do resto.
Exemplo:
O projeto já vem com:
Dockerfiledocker-compose.prod.ymlSubir produção:
docker compose -f docker-compose.prod.yml up -d --build
Cada processo tem seu próprio log:
Isso é fundamental para:
Automatizar cobranças não é só “gerar boleto”.
É lidar com:
Este projeto resolve isso de forma pragmática, realista e testada em produção.
👉 Repositório completo:
https://github.com/leonardop21/boleto-inter-free
WhatsApp é um canal excelente para alerta porque ele tem uma característica que e-mail e…
Em processos seletivos técnicos, não basta entregar código funcional. Cada vez mais, empresas avaliam arquitetura,…
O Notifish é um plugin para WordPress oficialmente aprovado no repositório do WordPress que permite…
A maioria dos desenvolvedores PHP sabe fazer CRUD.Isso não te torna pleno. Muito menos sênior.…
Você não precisa ser especialista nem passar horas auditando código para saber se um projeto…
WordPress não é lento, frágil ou amador. Ele só ficou mal-falado porque virou refém de…