Files
exdv/index.php
Andrey Kuvshinov 84f7b44926 add files
2025-10-17 12:23:41 +03:00

96 lines
3.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// exdv/add endpoint
//$pdo = new PDO('mysql:host=87.249.36.139;dbname=argumentiru;charset=utf8mb4', 'argumentiru', 'hjYu78kl*90-Uio23');
// exdv/add endpoint
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
// ОБРАБОТКА OPTIONS ЗАПРОСА (preflight)
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
http_response_code(200);
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// Получаем сырые JSON данные
$jsonInput = file_get_contents('php://input');
$input = json_decode($jsonInput, true);
// Логируем для отладки
error_log("Raw JSON input: " . $jsonInput);
error_log("Decoded data: " . print_r($input, true));
// Проверяем что JSON распарсился
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON: ' . json_last_error_msg()]);
exit;
}
// Валидация данных
if (!isset($input['adv_id']) || !is_numeric($input['adv_id'])) {
error_log("Ошибка: invalid adv_id");
http_response_code(400);
echo json_encode(['error' => 'Invalid adv_id', 'received_data' => $input]);
exit;
}
// Подготовка данных
$advId = (int)$input['adv_id'];
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'unknown';
$userAgent = $input['user_agent'] ?? '';
$pageUrl = $input['page_url'] ?? '';
$viewedAt = date('Y-m-d H:i:s');
// Создаем хэш на основе adv_id, ip, user_agent и текущей минуты
$minuteWindow = date('Y-m-d H:i');
$hashData = $advId . $ipAddress . $userAgent . $minuteWindow;
$viewHash = md5($hashData);
try {
$pdo = new PDO('mysql:host=87.249.36.139;dbname=argumentiru;charset=utf8mb4', 'argumentiru', 'hjYu78kl*90-Uio23');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Проверяем существующий просмотр по хэшу
$checkStmt = $pdo->prepare("SELECT view_id FROM `adv_views` WHERE view_hash = ? LIMIT 1");
$checkStmt->execute([$viewHash]);
if ($checkStmt->fetch()) {
echo json_encode([
'success' => true,
'duplicate' => true,
'message' => 'View already recorded in this minute'
]);
exit;
}
// Сохраняем новый просмотр с хэшем
$stmt = $pdo->prepare("INSERT INTO `adv_views` (`view_hash`, `adv_id`, `ip_address`, `user_agent`, `viewed_at`, `page_url`) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$viewHash, $advId, $ipAddress, $userAgent, $viewedAt, $pageUrl]);
$viewId = $pdo->lastInsertId();
http_response_code(200);
echo json_encode([
'success' => true,
'view_id' => $viewId,
'view_hash' => $viewHash,
'message' => 'View recorded successfully'
]);
} catch (PDOException $e) {
http_response_code(500);
error_log("Database error: " . $e->getMessage());
echo json_encode(['error' => 'Database error: ' . $e->getMessage()]);
}
} else {
http_response_code(200);
echo json_encode(['error' => 'Method not allowed']);
}
?>