$value) {
$data[$key] = decodeUnicodeRecursive($value);
}
} elseif (is_string($data)) {
$data = decodeUnicode($data);
}
return $data;
}
// Функция для логирования
function logMessage($message) {
$date = date('Y-m-d H:i:s');
file_put_contents('log.txt', "[$date] $message\n", FILE_APPEND);
}
// Функция для отправки уведомления в Telegram
/*function sendToTelegram($message) {
$chatId = '-4533691352';
$token = '';
$url = "https://api.telegram.org/bot$token/sendMessage";
$postFields = [
'chat_id' => $chatId,
'text' => $message,
'parse_mode' => 'Markdown'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_exec($ch);
curl_close($ch);
}*/
// Функция для проверки и записи транзакций в JSON файл
function recordTransaction($orderReference, $transactionStatus, $data) {
$filename = 'transactions.json';
// Чтение существующих данных
if (file_exists($filename)) {
$existingData = json_decode(file_get_contents($filename), true);
} else {
$existingData = [];
}
// Проверка существования транзакции по orderReference и transactionStatus
if (isset($existingData[$orderReference]) && $existingData[$orderReference] === $transactionStatus) {
logMessage("Транзакция с orderReference $orderReference уже существует.");
return false; // Транзакция уже записана
}
// Добавление новой транзакции
$existingData[$orderReference] = $transactionStatus;
file_put_contents($filename, json_encode($existingData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
logMessage("Записана новая транзакция: orderReference $orderReference, status $transactionStatus.");
return true; // Новая транзакция записана
}
// Получение входных данных (например, через POST-запрос)
$inputData = file_get_contents('php://input');
// Проверка наличия данных
if (!$inputData) {
logMessage('No input data provided');
echo json_encode(['error' => 'No input data provided']);
exit;
}
// Преобразование данных из JSON-формата
$decodedInput = json_decode($inputData, true);
// Проверка корректности формата JSON
if (json_last_error() !== JSON_ERROR_NONE) {
logMessage('Invalid JSON format');
echo json_encode(['error' => 'Invalid JSON format']);
exit;
}
// Рекурсивное преобразование всех строк с Unicode
$decodedInput = decodeUnicodeRecursive($decodedInput);
// Проверка на статус "Approved"
if ($decodedInput['transactionStatus'] !== 'Approved') {
logMessage('Транзакция не одобрена. Статус: ' . $decodedInput['transactionStatus']);
exit;
}
// Получение необходимых данных для записи и отправки
$orderReference = $decodedInput['orderReference'];
$transactionStatus = $decodedInput['transactionStatus'];
$amount = $decodedInput['amount'];
$currency = $decodedInput['currency'];
$email = $decodedInput['email'];
$phone = $decodedInput['phone'];
$clientName = decodeUnicode($decodedInput['clientName']); // Декодирование имени клиента
// Проверяем наличие продуктов и берем первый из них
$productName = isset($decodedInput['products'][0]['name']) ? decodeUnicode($decodedInput['products'][0]['name']) : 'Продукт не указан';
// Проверка и запись транзакции в JSON файл
if (!recordTransaction($orderReference, $transactionStatus, $decodedInput)) {
exit; // Транзакция уже записана, дальнейшие действия не нужны
}
// Формирование сообщения для отправки в Telegram
/*$telegramMessage = "Новая транзакция:\n";
$telegramMessage .= "*Order Reference:* $orderReference\n";
$telegramMessage .= "*Transaction Status:* $transactionStatus\n";
$telegramMessage .= "*Amount:* $amount $currency\n";
$telegramMessage .= "*Email:* $email\n";
$telegramMessage .= "*Phone:* $phone\n";
$telegramMessage .= "*Client Name:* $clientName\n";
$telegramMessage .= "*Product Name:* $productName\n";
// Отправка уведомления в Telegram
sendToTelegram($telegramMessage);
// Логирование успешного уведомления
logMessage("Уведомление отправлено в Telegram для транзакции $orderReference.");*/
// Отправка данных на вебхук 1 (Make)
$webhookUrl1 = 'https://hook.eu2.make.com/58382y5mc3mqgr542k44yn14ub88hgfu';
$jsonData = json_encode($decodedInput, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
// Инициализация cURL для вебхука 1
$ch1 = curl_init($webhookUrl1);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_setopt($ch1, CURLOPT_POST, true);
curl_setopt($ch1, CURLOPT_POSTFIELDS, $jsonData);
$response1 = curl_exec($ch1);
// Проверка ошибок cURL для вебхука 1
if ($response1 === false) {
$error = curl_error($ch1);
logMessage("Ошибка при отправке данных на вебхук 1: $error");
} else {
logMessage("Данные успешно отправлены на вебхук 1. Ответ: $response1");
}
curl_close($ch1);
// Отправка данных на вебхук 2 (Webhook.site)
$webhookUrl2 = 'https://webhook.site/c9a0597f-0196-4f9a-8758-221691119fa7';
// Инициализация cURL для вебхука 2
$ch2 = curl_init($webhookUrl2);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_setopt($ch2, CURLOPT_POST, true);
curl_setopt($ch2, CURLOPT_POSTFIELDS, $jsonData);
$response2 = curl_exec($ch2);
// Проверка ошибок cURL для вебхука 2
if ($response2 === false) {
$error = curl_error($ch2);
logMessage("Ошибка при отправке данных на вебхук 2: $error");
} else {
logMessage("Данные успешно отправлены на вебхук 2. Ответ: $response2");
}
curl_close($ch2);
// Печать итоговых данных для отладки
echo $jsonData;
?>