'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']); } ?>