Cerebro Studio · Backlog · Changelog
SeuImovel • /www/wwwroot/seuimovel.rio.br/docs/BACKLOG.md
Abrir Studio Projeto externo em modo read-only; encaminhamento permitido, escrita bloqueada.

Backlog Unificado

Projeto: SeuImovel. Fonte principal: /www/wwwroot/seuimovel.rio.br/docs/BACKLOG.md.

Modo read-only: ações de escrita ficam disponíveis apenas para o Cérebro.

Especificações Disponíveis (fora da fila pendente)

Detalhe do BK Selecionado

/www/wwwroot/seuimovel.rio.br/docs/backlog/BK-344-mercadopago-pix-dual-gateway.md • 2026-07-25T13:31:42.038Z

BK-344 - Mercado Pago PIX como gateway alternativo (dual com PagSeguro)

Contexto

Pedido do dono em 25/07/2026: replicar no seuimovel.rio.br o mesmo padrão de checkout dual que já existe no rionoteatro.com.br (uma config que escolhe entre PagSeguro e Mercado Pago), usando a mesma conta/token de Mercado Pago já usada no RNT — só muda a descrição do pedido, porque a conta MP está no nome pessoal do dono, não da empresa do rionoteatro.

Espelhado a partir de painel/modulos/creditos/action.php + callback_mp.php do rionoteatro.com.br (fluxo de compra de créditos via PIX, mais próximo do caso do seuimovel do que o fluxo de ingressos).

O que foi feito em 25/07/2026

  • Config do gateway: model ConfiguracaoPagamento (imoveis/models.py), editável via Django Admin (/admin/imoveis/configuracaopagamento/) — equivalente à tabela site_config/página de config do RNT. Default pagseguro (comportamento atual não muda até o dono trocar manualmente).
  • Credenciais: MERCADOPAGO_PUBLIC_KEY_PIX, MERCADOPAGO_ACCESS_TOKEN_PIX, MERCADOPAGO_WEBHOOK_SECRET_PIX, MERCADOPAGO_PIX_EXPIRATION_MINUTES no .envmesmos valores literais do rionoteatro.com.br (mesma conta MP, confirmado pelo dono).
  • Criação do PIX: views.iniciar_pagamento_mp_pix(), chamada por comprar_creditos() quando ConfiguracaoPagamento.get_gateway_ativo() == 'mercadopago'. Descrição enviada ao MP começa com "SeuImovelRio - ..." pra diferenciar do rionoteatro no extrato/dashboard da conta. external_reference no formato SEUIMOVEL-CRED-{user_id}-{pacote_id}-{timestamp} (não precisou de tabela de "compra pendente" separada — a referência carrega tudo que o webhook precisa, mesmo padrão que webhook_pagseguro já usava).
  • Webhook: views.webhook_mercadopago() em /mercadopago-webhook/. Verifica a assinatura HMAC-SHA256 (x-signature/x-request-id, mesmo algoritmo de mp_callback_validar_assinatura() do RNT) e revalida direto na API do MP antes de creditar (nunca confia no corpo do POST). Dedup via TransacaoCredito.codigo_transacao (mesmo campo já usado pelo PagSeguro, criado no BK-18 item 4).
  • Nginx: rate limit dedicado (mp_webhook_seuimovel_rl, 120r/m, burst=20) em /mercadopago-webhook/, mesmo padrão do BK-18 item 6/BK-341 item 7.
  • Template: imoveis/pagamento_pix.html (QR code + copia-e-cola), simples, sem redirect externo (diferente do PagSeguro que redireciona pra fora do site).

Validação em 25/07/2026

  • python manage.py check sem erro; manage.py migrate aplicado (migration 0009_configuracaopagamento).
  • Site no ar depois do restart: home//imoveis/ 200.
  • POST /mercadopago-webhook/ sem assinatura → 401 (rejeita corretamente). GET /mercadopago-webhook/ → 405.
  • Teste real de integração: criei uma cobrança PIX real de R$1,00 direto na API do Mercado Pago com as credenciais de produção (pagamento id 169589827359, external_reference com usuário fake 999999 pra nunca poder creditar ninguém de verdade mesmo que alguém pague por engano) — resposta HTTP 201, qr_code e qr_code_base64 presentes. Confirma que a credencial funciona pra essa conta/contexto e que o parsing da resposta está correto. Não paguei o PIX de propósito (não precisa, e evita gerar crédito real de teste); ele expira sozinho.

Pendente / decisão do dono

  • Gateway ainda está em pagseguro por padrão — nada muda pro usuário final até o dono trocar em /admin/imoveis/configuracaopagamento/.
  • Ainda não existe uma compra real de créditos completada via PIX ponta-a-ponta (webhook nunca recebeu notificação real ainda). Recomendo trocar o config pra mercadopago, fazer uma compra real pequena e confirmar que os créditos caem na conta — só aí dar como 100% validado em produção.