O BarberBot recebe retornos externos por webhook para automatizar baixa de pagamentos e interpretar respostas via WhatsApp/mensageria. Os arquivos encontrados no projeto são:
- MP
pagamentos/webhook.php — retorno do Mercado Pago (pagamento aprovado/pendente/cancelado).
- CHAT
ajax/retorno.php — retorno JSON do provedor de WhatsApp.
- CHAT
ajax/retornoMenuia.php — variação equivalente (mesma estrutura).
💳 Webhook Mercado Pago — pagamentos/webhook.php
URL e método
- Método: GET (parâmetros na querystring).
- Formato esperado:
?topic=payment&id=123456
- Alguns ambientes enviam
type no lugar de topic (o script trata os dois).
Parâmetros recebidos
| Parâmetro | Obrigatório | Descrição |
topic | sim | Tipo de notificação (no BarberBot o foco é payment). |
id | sim | ID do pagamento no Mercado Pago. |
type | não | Alias de topic (em alguns setups). |
O que o script faz (lógica real)
- Carrega
pagamentos/config.php (tokens, flags) e ../sistema/conexao.php (PDO e config do sistema).
- Consulta o pagamento no MP via API:
GET https://api.mercadopago.com/v1/payments/{id} usando Authorization: Bearer {access_token}
- Lê o
status retornado (approved, pending, cancelled etc.).
- Se
approved:
- Identifica a conta interna pela referência (o script atualiza/reforça
ref_pix em receber quando necessário).
- Se a conta ainda não estiver marcada como paga, chama
baixar_conta.php para dar baixa.
- Responde JSON simples para o MP e logs do servidor.
Resposta (JSON)
{"status":"pago"}
{"status":"pending"}
Dependências diretas
pagamentos/baixar_conta.php — executa a baixa no banco (atualiza receber, data_pgto, etc.).
pagamentos/config.php e pagamentos/tokens.php — credenciais do MP.
📲 Retorno WhatsApp / Mensageria — ajax/retorno.php e ajax/retornoMenuia.php
URL e método
- Método: POST
- Corpo: JSON via
php://input
Payload esperado (chaves encontradas no código)
| Chave | Tipo | Descrição |
tipo | string | Tipo de retorno. Controla o fluxo de confirmação/cancelamento. |
idAgendamento | int/string | ID do agendamento afetado. |
mensagem | string | Texto enviado pelo cliente (resposta no WhatsApp). |
remetente | string | Número do remetente (cliente). |
destinatario | string | Número do destinatário (instância/sistema). |
Exemplo de JSON
{
"tipo": "retorno",
"idAgendamento": 123,
"mensagem": "1",
"remetente": "11999999999",
"destinatario": "5511999999999"
}
O que esses scripts fazem
- Decodificam o JSON e extraem as chaves acima.
- Formatam telefone para o padrão com DDI
55.
- Executam regras de confirmação/cancelamento do agendamento com base na mensagem recebida.
- Disparam respostas via
ajax/api-texto.php.
Quando usar retorno.php vs retornoMenuia.php
- Ambos aceitam o mesmo payload e fazem a mesma coisa; o projeto mantém os dois para compatibilidade de integrações.
🔒 Segurança (obrigatório)
- Mercado Pago: ideal validar assinatura/headers do webhook quando disponível, além do
id na URL.
- Mensageria: adicionar secret/token no payload ou header e validar antes de processar.
- Servidor: sempre HTTPS, e rate-limit no endpoint público.
- Logs: não logar token; logar só status + referências.
🧪 Checklist de teste
- Configurar URL do MP para apontar para
/pagamentos/webhook.php.
- Realizar pagamento teste e confirmar se o MP chama o webhook.
- Confirmar no banco a baixa (tabela
receber com pago=Sim).
- Simular retorno de mensageria fazendo POST com JSON para
/ajax/retorno.php.