Backlog Unificado
Projeto: RioNoTeatro. Fonte principal: /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Modo read-only: ações de escrita ficam disponíveis apenas para o Cérebro.
Sem itens pendentes em /www/wwwroot/rionoteatro.com.br/docs/BACKLOG.md.
Especificações Disponíveis (fora da fila pendente)
- BK-136
- BK-137
- BK-138
- BK-147
- BK-148
- BK-149
- BK-150
- BK-151
- BK-156
- BK-158
- BK-159
- BK-160
- BK-161
- BK-162
- BK-163
- BK-164
- BK-165
- BK-166
- BK-170
- BK-171
- BK-172
- BK-177
- BK-183
- BK-186
- BK-187
- BK-189
- BK-190
- BK-191
- BK-192
- BK-193
- BK-195
- BK-196
- BK-197
- BK-198
- BK-199
- BK-201
- BK-205
- BK-207
- BK-208
- BK-209
- BK-210
- BK-211
- BK-212
- BK-213
- BK-214
- BK-215
- BK-216
- BK-217
- BK-218
- BK-219
- BK-220
- BK-221
- BK-229
- BK-230
- BK-231
- BK-232
- BK-233
- BK-234
- BK-235
- BK-236
- BK-239
- BK-240
- BK-241
- BK-242
- BK-243
- BK-244
- BK-245
- BK-246
- BK-248
- BK-249
- BK-250
- BK-251
- BK-252
- BK-253
- BK-254
- BK-255
- BK-256
- BK-257
- BK-258
- BK-259
- BK-260
- BK-261
- BK-262
- BK-263
- BK-264
- BK-265
- BK-266
- BK-267
- BK-268
- BK-269
- BK-270
- BK-271
- BK-272
- BK-275
- BK-276
- BK-277
- BK-278
- BK-279
- BK-280
- BK-295
- BK-313
Detalhe do BK Selecionado
/www/wwwroot/rionoteatro.com.br/docs/backlog/BK-214-pagseguro-api-migration.md • 2026-04-06T23:45:13.441Z
BK-214 - Migração para a API PagBank (PagSeguro nova) com ponte PHP moderno
Status Atual
- 📦 BK-214 pronto para produção: checkout PagBank (PIX + Cartão) homologado e funcional 🚀
Próximos Backlogs (após entrega)
- Alertas de cancelamento reforçados: disparar mensagem no dashboard admin (
/admin/index.php) e notificar o WhatsApp helper quando o cliente clicar em “Cancelar compra” no painel (/painel/modulos/pedidos/?focus=pedido&id={{id}}). - Modal de cancelamento escuro: ao clicar em “Cancelar pedido” com status Pago/Disponível (3/4), exibir modal com layout dark, botão contrastante e atualizar a página do cliente para mostrar “Solicitado Cancelamento” imediatamente.
Contexto
- o site público e muitos módulos administrativos ainda rodam sobre PHP 5.6 e utilizam a PagSeguroLibrary antiga (V2).
- a VPS já tem um interpretador moderno (PHP 8.3) e um Gateway Centralizado em /opt/pagbank-gateway/.
Fase 1 - Infraestrutura (CONCLUÍDA ✅)
- [x] PHP 8.3.12 validado via Web (test.php).
- [x] SDK PagSeguro instalado via Composer.
- [x] Permissões ajustadas para usuário 'www'.
- [x] Arquivo de log pagbank_api.log criado.
Fase 2 - Integração Core (EM EXECUÇÃO 🚀)
- [ ] Estratégia de Teste Seguro: Implementar flag $_GET['_pgtest'] === 'sim' no efetua-pagamento.php para rotear para o Gateway Sandbox sem afetar pedidos reais.
- [ ] Validação de Checkout (Cartão): Testar fluxo checkout_page end-to-end em Sandbox usando a flag de teste.
- [x] Implementação do PIX (Gateway): Criar lógica no PHP 8.3 para chamar PagBank Orders API e retornar qr_code (base64) e text (copia-e-cola).
- [ ] Implementação do Cartão de Crédito (Gateway): Criar lógica no PHP 8.3 para processar pagamentos via Cartão (REST Orders API) usando o card_token do front-end.
- [x] Renderização PIX (Legado): Criar página de exibição do PIX no PHP 5.6 que recebe o JSON do Gateway e renderiza o QR Code.
- [x] Layout PIX: Alinhar o cartão com o checkout dark (placeholder, button copy, feedback inline).
- [ ] Implementar Polling de Status (JS) e Redirecionamento Pós-Pago. 🚀 EM EXECUÇÃO
- [ ] Implementar Baixa Automática no Webhook (notifications_pagseguro.php). 🚀 EM EXECUÇÃO
- [ ] Interface de Cartão (Legado): Criar formulário de captura de cartão no PHP 5.6 usando o SDK JavaScript do PagSeguro para tokenização segura.
- [ ] Monitoramento de Logs: Validar se o pagbank_api.log registra corretamente as tentativas de transação.
- [ ] Integração de Public Key Dinâmica: manter o
card_tokenatualizado via API e evitar persistência direta de dados sensíveis. 🚀 EM EXECUÇÃO
Fase 3 - Migração Admin e Virada de Chave
- [x] Fase 3.2 - Tokenização Real: Tokenização de Cartão de Crédito via SDK PagBank. ✅ CONCLUÍDA
- [ ] Mapear Webhooks: Configurar notifications.php para receber avisos do PagBank.
- [ ] Protocolo de Virada: Trocar projects/rnt.env (Sandbox -> Produção) em horário de baixo tráfego.
- [ ] Modo Manutenção: Ativar aviso amigável de 2 minutos durante a troca de credenciais.
- [ ] Rollback: Manter rnt.sandbox.env pronto para restauração imediata em caso de falha.
- [x] Correção de Seletor de Abas (JS): alinhar clique e atributos de tabulação no checkout de cartão antes da versão 12 do
checkout_pix_pagseguro.js. - [x] Sincronização de visibilidade do QR Code entre abas: garantir que
.checkout-pix-resultsó apareça quandoview-pixestiver ativa e permaneça oculta nas outras views. - [x] Fase 3.5 - Refino de Formulário: consolidar o novo layout do cartão (SDK PagBank + billing address) e alinhar a página de confirmação.
- [x] Correção de Ordem de Carregamento: SDK do PagBank carrega antes do
checkout_pix_pagseguro.jspersonalizado. - [x] Criação da Página de Confirmação PagSeguro: confirm_pagamento_pagseguro.php recebe redirect do PagBank e exibe resumo.
Atualizações Recentes
- 05/04/2026: Fase 1 homologada pelo Analista Sênior (Gemini) e Planner (Claude).
- 05/04/2026: Estratégia de bypass de teste (_pgtest) aprovada para evitar impacto em produção.
- 05/04/2026: Evolução do Gateway PHP 8.3 concluída com Guzzle, mocks do v2/orders e QR exibido no PHP 5.6.
- 05/04/2026: Tokenização segura client-side homologada no checkout via
PagSeguro.encryptCard, com envio ao servidor restrito aocard_token.
Relatório de Status Atual (Fase 2)
- Gateway REST simulado pronto:
/opt/pagbank-gateway/api.phpagora depende apenas do Guzzle e responde JSON com estrutura compatível com a Orders API (PIX retornaqr_code_base64ecopy_paste_key, cartão retornatransaction_idelinks.payment_url). A validação daPAGBANK_BRIDGE_API_KEYe o carregamento do.envpor projeto (projects/rnt.env) já estão implementados. - Mock de pagamentos: Enquanto não há token real, usamos dados fake (QR base64 gerado com
uniqid(), chave copy/paste etransaction_idprefixado comMOCK-). Isso permite testar UX do checkout transparente e, quando o token real for liberado, basta ajustar a chamada para a API oficial. - Integração com o PHP 5.6:
efetua-pagamento.phpe variantes (action_pagseguro.php,efetua-pagamento_teste.php, etc.) continuam compatíveis com PHP 5.6: usammysqli,curlejson_decode, só chamam o gateway viapagbank_gateway_call. A flag_pgtest=simativa o novo fluxo; sem ela os pedidos seguem normalmente (sem qualquer quebra no Mercado Pago). - Renderizações PIX e cartão: Quando o gateway responde com PIX mostramos um modal inspirado no checkout Mercado Pago, exibindo o QR, chave e botão de cópia; para cartão exibimos uma tela com mensagem e link do PagSeguro. Em ambos os casos a lógica de front-end está isolada e independente do antigo PagSeguro.
- Filtro de dependências: O SDK PagSeguro foi removido do composer e substituído por
guzzlehttp/guzzlepara chamadas REST. O logpagbank_api.logcontinua em/opt/pagbank-gatewaysobwww:wwwe documenta o que chega do PHP 5.6. - Pontes e micro check: Os arquivos legados trabalhavam com o PagSeguro clássico, mas agora apenas delegam ao gateway 8.3. O Mercado Pago permanece em seu fluxo próprio (como a auditoria mostra) e não é alterado neste BK. Esse isolamento garante que podemos evoluir a ponte sem interferir na produção atual.
Próximos passos (em paralelo)
- Credenciais sandbox/produção: Preencher
/opt/pagbank-gateway/projects/rnt.envcom as credenciais oficiais e atualizarPAGBANK_BRIDGE_API_KEYno.env. - Testes funcionais: Rodar a flag
?_pgtest=simcom um pedido de teste real e registrar opagbank_api.log+ o redirecionamento (ou tela de QR/cartão resultante). - Conectar Orders API: Trocar os mocks por chamadas reais ao
https://api.pagbank.com/v2/orders, reutilizando o Guzzle já instalado para criar PIX/cartão. - Documentar e homologar: Registrar no arquivo e no backlog que a ponte está 100% testada antes de liberar para clientes, e manter um plano de rollback com a configuração
.envde sandbox pronta.
Fase 4 · Cadastro da Aplicação (passo final)
- [ ] Cadastro de Aplicação no Portal PagBank: último passo da fase 4, registra o sistema como app oficial e libera acesso à Orders API em produção. Após o Admin inserir o
PAGBANK_APP_IDe oPAGBANK_APP_KEYfornecidos pelo PagBank, copiar essas credenciais para/opt/pagbank-gateway/projects/rnt.enve confirmar que o gateway responde com erros 500 claros quando qualquer credencial obrigatória estiver ausente. - Execução de validação (
curlreal):
```
curl -X POST https://api.pagseguro.com/orders \
-H "Authorization: {token}" \
-H "Content-Type: application/json" \
-d '{"reference_id":"teste","items":[...],"qr_codes":[...],"amount":{...}}'
```
O objetivo é garantir que o erro 403 Forbidden - whitelist access required desapareça após o cadastro e o token passar a valer.
- URLs oficiais registradas no Portal:
- Notificações:
https://www.rionoteatro.com.br/notifications_pagseguro.php - Redirecionamento pós-pedido (confirmá-lo no checkout):
https://www.rionoteatro.com.br/confirm_pagamento_pagseguro.php
- Observação: após o cadastro, a fase 4 estará finalizada; manter o log
pagbank_api.logalinhado com os testes e comunicar qualquer erro novo detectado durante o curl de validação.
Correções de Infraestrutura (05/04/2026)
- [x] Fix typo: file_put_contents no Gateway.
- [x] Permissões: chown www:www em api.php e rnt.env.
- [x] Bypass open_basedir: .env local em /private/ (protegido via Nginx).
- [x] Symlink: /pagbank -> /opt/pagbank-gateway criado para acesso via Web.
Melhorias Administrativas (06/04/2026)
- [x] Restauração da Sincronização Mercado Pago no Admin (pedidos_2).
- [x] Unificação da função pedidoPermiteConferirPagSeguro para suportar MP, PagBank e PagSeguro.
- [x] Restauração do Botão de Sync no Detalhe do Pedido.
- [x] Unificação de Credenciais (Banco + .env) para Sincronização ✅
Status Final
- [x] Checkout PagBank (PIX + Cartão) homologado.
- [x] Sincronização Administrativa restaurada e unificada.
- [x] BK PRONTO PARA PRODUÇÃO (Aguardando Whitelist) ✅