Este documento descreve a estrutura e a lógica do módulo /pagamentos. Ele é responsável por:
- Receber o usuário vindo do fluxo de agendamento e cobrar via Mercado Pago (ou redirecionar para Asaas).
- Permitir pagamento de assinaturas (tabela
assinaturas).
- Permitir pagamento de contas a receber (tabela
receber).
- Processar retorno do Mercado Pago via webhook e dar baixa automática.
📁 Arquivos existentes em pagamentos/
PHP (páginas e endpoints)
index.php – tela de pagamento do agendamento (baseado em agendamentos_temp).
pagar.php – tela de pagamento de assinatura (baseado em assinaturas).
receber.php – tela de pagamento de conta a receber (baseado em receber).
pagamento_aprovado.php – finalização: confirma agendamento e/ou marca pagamentos como aprovados.
process_payment.php – cria pagamento no MP e também consulta status (modo ?acc=check).
process_payment2.php – variante do process_payment (mesma função geral; mantém compatibilidade).
process_payment_assinatura.php – cria/consulta pagamento no MP para assinatura.
process_payment_conta.php – cria/consulta pagamento no MP para conta em receber e faz baixa.
webhook.php – endpoint para notificações do Mercado Pago (?topic=payment&id=...).
baixar_conta.php – rotina central de baixa de conta (atualiza receber, caixa, recorrência e recibo WhatsApp).
config.php – configuração do MP (modo produção/teste, flags Pix/Boleto/Cartão, URL de notificação).
tokens.php – ponte de token público/privado (usa variáveis vindas do sistema).
consultar_pagamento.php – helper de consulta de status por $ref_pix (debug/apoio).
api-texto.php, api-agendar.php, confirmacao.php, agendar-delete.php – mensageria/WhatsApp (Menuia/Enviame) usada por recibo/alertas.
Assets (interface do checkout)
assets/bootstrap.min.css, assets/signin.css, assets/css/index.css – layout do checkout.
assets/jquery-3.6.4.min.js, assets/jquery.mask.min.js – suporte a máscara e DOM.
assets/js/mp_cartao.js, assets/js/mp_boleto.js – fluxo do MP no frontend (cartão/boleto).
assets/img/* e imagens auxiliares (Loading_icon.gif, check_ok.png).
⚙️ Configuração (tokens, modo, flags)
config.php
- MPDefine
$modoProducao (true/false) para alternar credenciais.
- TOKENSCarrega
tokens.php e usa $access_token / $public_key.
- NOTIFDefine
$URL_NOTIFICACAO (URL do webhook) usado na criação de pagamento.
- FLAGSAtiva/desativa opções:
$ATIVAR_PIX, $ATIVAR_BOLETO, $ATIVAR_CARTAO_CREDITO, $ATIVAR_CARTAO_DEBIDO.
- CPF
$CPF_PADRAO (se vazio, cliente informa CPF na tela).
tokens.php
- Mapeia
$access_token e $public_key a partir de variáveis do sistema ($access_token_mp, $public_key_mp).
- Origem típica:
../sistema/conexao.php (config do sistema).
Variáveis do sistema que influenciam o pagamento
$api_pagamento: se for Asaas, páginas redirecionam para rotas específicas (pagamento_asaas, pagar_asaas, plano_asaas).
$pgto_api: se não for Sim, o sistema pula o checkout e aprova direto.
$opcao_pagar: se for Não, o sistema pula o checkout e aprova direto.
$porc_servico: pode recalcular valor (percentual) em agendamentos.
🧠 Tabelas do banco que o módulo usa
| Tabela | Uso no módulo de pagamentos |
agendamentos_temp | Pré-agendamento (reserva) antes do pagamento. Armazena ref_pix e dados do agendamento. |
agendamentos | Agendamento definitivo após aprovação. Recebe ref_pix e valor_pago. |
horarios_agd | Controle de horários ocupados (evita choque de agenda). |
servicos | Origem do valor do serviço (pode aplicar percentual configurado). |
clientes | Dados do cliente para recibo/WhatsApp. |
assinaturas | Controle de pagamentos recorrentes/planos (ref do MP e status de pagamento). |
receber | Contas a receber (assinaturas, comissão, cobranças e baixas). Atualiza pago, data_pgto, ref_pix, etc. |
caixas | Vincula baixa ao caixa aberto do operador (quando existe). |
🔁 Fluxo 1: Pagamento de Agendamento (site)
1) Entrada na tela
- URL:
/pagamentos/index.php?id_conta={ID_AGENDAMENTO_TEMP}&total={opcional}
- Busca
agendamentos_temp pelo id_conta e carrega serviço em servicos.
- Se
$api_pagamento == "Asaas", redireciona para a rota Asaas.
- Se
$opcao_pagar == "Não" ou $pgto_api != "Sim", pula checkout e chama a finalização.
2) Checkout no frontend
- Carrega o SDK do Mercado Pago:
https://sdk.mercadopago.com/js/v2
- Os assets do checkout ficam em
pagamentos/assets/.
- O JS envia os dados do pagamento via fetch (JSON) para
process_payment.php.
3) Processamento
process_payment.php cria o pagamento via API do Mercado Pago (/v1/payments).
- O pagamento aprovado finaliza em
pagamento_aprovado.php, que insere em agendamentos e ocupa horários.
🔁 Fluxo 2: Pagamento de Assinatura (plano)
1) Entrada na tela
- URL:
/pagamentos/pagar.php?id_conta={ID_ASSINATURA}
- Busca
assinaturas e carrega o item em itens_assinaturas.
- Busca dados do cliente em
clientes.
- Se
$api_pagamento == "Asaas", redireciona para a rota plano_asaas.
2) Processamento
- O checkout chama
process_payment_assinatura.php.
- O endpoint grava o
ref_pix na assinatura e, quando aprovado, segue a finalização do sistema.
🔁 Fluxo 3: Pagamento de Conta a Receber
1) Entrada na tela
- URL:
/pagamentos/receber.php?id_conta={ID_RECEBER}
- Busca
receber e o cliente relacionado em clientes.
- Se
$api_pagamento == "Asaas", redireciona para a rota Asaas equivalente.
2) Processamento
- O checkout chama
process_payment_conta.php.
- Quando aprovado, garante
ref_pix em receber e executa a baixa completa via baixar_conta.php.
3) Webhook (recomendado)
- O Mercado Pago chama o webhook para confirmar (
topic=payment).
webhook.php consulta o pagamento e, se aprovado, executa baixar_conta.php (com trava de dupla baixa).
📌 Endpoints detalhados (inputs e retorno)
index.php (agendamento)
| Método | Parâmetros | Retorno |
| GET |
id_conta (obrigatório) – ID em agendamentos_temp
total (opcional) – valor/regra do sistema
|
HTML do checkout (ou redirecionamento / finalização direta) |
pagar.php (assinatura)
| Método | Parâmetros | Retorno |
| GET |
id_conta (obrigatório) – ID em assinaturas |
HTML do checkout |
receber.php (conta)
| Método | Parâmetros | Retorno |
| GET |
id_conta (obrigatório) – ID em receber |
HTML do checkout |
process_payment.php (agendamento)
- CHECKConsulta:
GET ?acc=check&id={MP_PAYMENT_ID}&id_conta={ID_AGENDAMENTO_TEMP}
- CREATECriação:
POST JSON (corpo compatível com /v1/payments)
Retorno típico (JSON):
{
"id": 1234567890,
"status": true,
"tipo": "pix",
"message": "texto amigável do status"
}
process_payment2.php (variante)
- Mesma proposta do
process_payment.php (consulta/criação), mantendo compatibilidade de fluxo.
- Em modo
check, atualiza agendamentos_temp.ref_pix e pode chamar pagamento_aprovado.php.
process_payment_assinatura.php
- Consulta/criação de pagamento de assinatura.
- Atualiza
assinaturas.ref_pix.
process_payment_conta.php
- Consulta/criação de pagamento para conta em
receber.
- Quando aprovado: garante
receber.ref_pix e chama baixar_conta.php para dar baixa completa.
webhook.php
| Método | Parâmetros | Comportamento |
| GET |
topic e id (padrão MP) ou type e id
|
Consulta /v1/payments/{id}. Se status=approved: grava ref_pix em receber e executa baixar_conta.php se ainda não estiver pago.
|
baixar_conta.php
- É uma rotina incluída (não é endpoint direto).
- Requisito: variável
$id precisa estar definida (ID em receber).
- O que faz (mantendo a lógica existente):
- Busca conta em
receber e dados do cliente.
- Se existir
hash (mensageria), cancela agendamento remoto (agendar-delete.php).
- Atualiza
receber: pago=Sim, data_pgto, usuario_baixa, caixa, hora, etc.
- Se recorrente (assinatura), cria a próxima conta em
receber conforme frequência.
- Envia recibo via WhatsApp chamando
../ajax/api-texto.php.
🔐 Observações de segurança (sem frescura)
- Tokens MP: não versionar token no Git. Manter em config segura (variáveis do sistema).
- Webhook: URL real deve apontar para
/pagamentos/webhook.php. Ajustar $URL_NOTIFICACAO no deploy.
- Validação: o frontend monta o JSON, mas a validação final é sempre no backend.
🧯 Troubleshooting rápido
pagamentos/error_log pode registrar falhas do servidor.
- Se o MP aprovou e não baixou:
- conferir
$URL_NOTIFICACAO e acesso público ao webhook
- verificar se o pagamento tem
external_reference (para achar a conta)
- confirmar se
receber.pago está mudando para Sim