-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebhook_kiwify.php
More file actions
95 lines (75 loc) · 3.43 KB
/
webhook_kiwify.php
File metadata and controls
95 lines (75 loc) · 3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?php
// Configurações
header("Content-Type: application/json");
// Incluir funções de cliente
require_once dirname(__FILE__) . "/funcoes_cliente.php";
// Caminho para o arquivo de clientes
$clientesJsonFile = dirname(__FILE__) . "/clientes.json";
// Função para registrar logs
function logWebhook($mensagem) {
file_put_contents("webhook_kiwify_log.txt", date("Y-m-d H:i:s") . " - " . $mensagem . "\n", FILE_APPEND);
}
// Função para responder ao webhook
function responderWebhook($sucesso, $mensagem, $codigo = 200) {
http_response_code($codigo);
echo json_encode(["sucesso" => $sucesso, "mensagem" => $mensagem]);
exit;
}
// Obter o payload JSON da requisição
$payload = file_get_contents("php://input");
logWebhook("Payload bruto recebido: " . $payload);
if (empty($payload)) {
logWebhook("Payload vazio recebido");
responderWebhook(false, "Payload vazio", 400);
}
$data = json_decode($payload, true);
// Verificar se o payload é válido
if (json_last_error() !== JSON_ERROR_NONE) {
logWebhook("Payload JSON inválido: " . $payload);
responderWebhook(false, "Payload JSON inválido", 400);
}
// Tenta extrair o 'body' se o payload for do n8n
if (isset($data["body"]) && is_array($data["body"])) {
$dadosVenda = $data["body"];
} else {
// Se não for do n8n, assume que é o payload direto da Kiwify
$dadosVenda = $data;
}
// Verificar se os dados essenciais estão presentes no $dadosVenda
if (!isset($dadosVenda["webhook_event_type"])) {
logWebhook("Dados essenciais ausentes (webhook_event_type).");
responderWebhook(false, "Dados essenciais ausentes", 400);
}
$evento = $dadosVenda["webhook_event_type"] ?? null;
logWebhook("Evento: " . $evento);
logWebhook("Dados da Venda: " . json_encode($dadosVenda));
// Processar apenas eventos de venda aprovada
if ($evento === "order_approved") {
$emailCliente = $dadosVenda["Customer"]["email"] ?? null;
$productId = $dadosVenda["Product"]["product_id"] ?? null;
if (!$emailCliente || !$productId) {
logWebhook("Dados essenciais ausentes (email do cliente ou ID do produto).");
responderWebhook(false, "Dados essenciais ausentes", 400);
}
// Mapeamento de produtos Kiwify para limites de eventos
// ESTE MAPEAMENTO DEVE SER CONFIGURADO POR VOCÊ DE ACORDO COM SEUS PRODUTOS/PLANOS
$limitesPlanos = [
"94413b13-96cb-4575-b2e4-8b7ff3890883" => 1, // Exemplo baseado no webhook fornecido
"22" => 8,
"88" => 10,
// Adicione mais mapeamentos conforme seus planos
];
$novoLimite = $limitesPlanos[$productId] ?? null;
if ($novoLimite === null) {
logWebhook("ID de produto Kiwify não mapeado para limite de eventos: " . $productId);
responderWebhook(false, "Produto não reconhecido ou sem limite associado", 400);
}
// Adicionar ou atualizar cliente com token
$token = adicionarOuAtualizarClienteComToken($emailCliente, $novoLimite, "ativo");
logWebhook("Cliente processado: " . $emailCliente . " com limite de " . $novoLimite . " eventos. Token: " . $token);
responderWebhook(true, "Limite de eventos do cliente atualizado com sucesso. Token:$token Limite:$novoLimite e-mail:$emailCliente");
} else {
logWebhook("Evento Kiwify não processado: " . $evento);
responderWebhook(true, "Evento recebido, mas não processado (não é order_approved).");
}
?>