add files
This commit is contained in:
96
index.php
Normal file
96
index.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?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']);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user