--- tags: [ag-music, boleto, bradesco, api, bloqueado] created: 2026-04-20 updated: 2026-04-20 parent: "[[AG-Music]]" status: codigo-pronto-aguardando-bradesco --- # Integração Boleto Bradesco (Cobrança QR Code) ## Status **✅ Código 100% pronto** — toda arquitetura, UI, banco, anti-duplicação, validações **❌ API Bradesco rejeita** — bloqueio do lado deles (mTLS 401) ## Credenciais | Campo | Valor | |---|---| | Client ID | `567821ba-4198-42e5-925c-84bb5f1de225` | | Client Secret | `22af063b-7136-4a3e-aa0b-4272ad8dc83a` (expira 23/04/2026) | | CNPJ | 61.412.207/0001-68 | | Agência/Conta | 1028/0062060-2 | | Carteira | 09 | | Senha PFX | `PIN12345` | ## Certificado A1 ICP-Brasil - SHA1: `413D0D8BC6B78F926371024DCEEE76DC832A8E48` - Serial: `F0A37A3685AE897CE06E` - Válido até: 24/06/2026 - Subject: AG ESCOLA DE MUSICA LTDA:61412207000168 - Em `writable/bradesco/cert.pem` (2816 bytes, bate byte-a-byte com o que está no portal) ## Endpoints ### Auth - URL: `POST https://openapi.bradesco.com.br/auth/server/v1.1/token` - Body: `assertion=&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer` - JWT: RS256, claims `aud, sub, iat, exp (30 dias), jti (microtime), ver=1.1` - **Header/payload em base64 regular** (não base64url) — único lugar! - Signature em base64url - Sem `kid`, sem `iss` ### API Registro - URL: `POST https://openapi.bradesco.com.br/boleto-hibrido/cobranca-registro/v1/gerarBoleto` - Headers: `Authorization: Bearer `, `X-Brad-Nonce`, `X-Brad-Timestamp`, `X-Brad-Algorithm: SHA256`, `X-Brad-Signature` - String assinada: `POST\n\n\n\n\n\n\nSHA256` ## Arquitetura - **Service**: `BradescoService.php` (OAuth + mTLS + JWT + signature) - **Controller**: `BoletoController.php` (gerar, whatsapp, anti-duplicação) + `BoletoConfigController.php` (UI config) - **Model**: `BoletoModel.php` (UNIQUE em lancamento_id) + `BoletoConfigModel.php` - **DB**: Tabelas `boletos` + `boleto_config` - **View**: botão 🧾 "Boleto" em `matricula_editar.php` + aba "Boleto Bradesco" em `configuracoes.php` ## Bloqueio atual (mTLS 401) Auth OK, mas qualquer endpoint da API retorna: ``` HTTP 401 {"code":401,"message":"Falha na autenticação mTLS"} ``` Testado com/sem mTLS na chamada, em 2 endpoints diferentes, cert correto. Cert no portal: idêntico byte-a-byte. Recursos: todos "Aprovado em Produção" desde 2026-02-11. **Provavelmente**: vinculação interna cert↔resources do Bradesco ainda não propagou. **Ação**: chamado em `transacoes_api@bradesco.com.br`. ## Descoberta-chave (2026-04-20) Padrão OAuth Bradesco é **diferente** do clássico. Encontrado no repo [GYOVANNE/bradesco-access-token](https://github.com/GYOVANNE/bradesco-access-token): - Param `assertion=` (NÃO `client_assertion`) - `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer` (NÃO `client-assertion-type`) - Header/payload base64 regular, signature base64url ## Aba Boleto Bradesco (Configurações) - Ambiente sandbox/produção - Credenciais (Client ID + Secret mascarado) - Dados da conta (CNPJ, agência, conta, carteira) - Certificado com preview de validade + SHA1 + badge "✓ Cadastrado" - Upload com validação OpenSSL antes de salvar - Botões: Salvar + Testar Autenticação - Status badge (validado/erro/não testado) ## Ver também - [[AG-Music]] - [[Recibo Pagamento Aluno]] — mesmo padrão WhatsApp - [[Financeiro - Cards e Contas]]