Files
erv-clientright/hotels/database.php
2026-03-13 10:42:01 +03:00

214 lines
9.2 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
/**
* Проверка полиса в базе данных
* База данных: ci20465_erv
* Таблица: lexrpiority
*/
// Устанавливаем заголовки сразу
header('Content-Type: application/json; charset=utf-8');
// Загружаем .env
require_once __DIR__ . '/env_loader.php';
// Логирование
$log_file = __DIR__ . '/logs/policy_check.log';
$log_dir = dirname($log_file);
if (!is_dir($log_dir)) {
if (!@mkdir($log_dir, 0755, true)) {
error_log("Не удалось создать директорию для логов: $log_dir");
}
}
function log_message($message) {
global $log_file;
$timestamp = date('Y-m-d H:i:s');
$log_entry = "[$timestamp] $message\n";
// Пытаемся записать в лог
$result = @file_put_contents($log_file, $log_entry, FILE_APPEND);
// Если не удалось записать, пробуем записать в error_log
if ($result === false) {
$error = error_get_last();
error_log("Не удалось записать в лог $log_file: " . ($error['message'] ?? 'неизвестная ошибка'));
error_log("Сообщение для лога: $message");
}
}
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'user_verify' : user_verify(); break;
}
exit; // Важно! Завершаем выполнение после обработки действия
}
function user_verify() {
$inn = isset($_POST['inn']) ? trim($_POST['inn']) : '';
if (empty($inn)) {
log_message("Номер полиса не указан");
echo json_encode([
"success" => "false",
"message" => "Номер полиса не указан",
"result" => ""
], JSON_UNESCAPED_UNICODE);
return;
}
// Нормализация номера полиса (Е/А -> E/A)
$inn_original = $inn;
$inn = str_replace(['Е', 'е'], ['E', 'e'], $inn);
$inn = str_replace(['А', 'а'], ['A', 'a'], $inn);
if ($inn_original !== $inn) {
log_message("Номер полиса нормализован: $inn_original -> $inn");
}
log_message("Проверка полиса: " . $inn);
// Проверка через N8N webhook (только номер полиса)
$webhook_url = trim(env('N8N_POLIS_WEBHOOK', ''));
if ($webhook_url !== '') {
$payload = json_encode(['police_number' => $inn]);
log_message("N8N webhook: POST " . $webhook_url . " body=" . $payload);
$ch = curl_init($webhook_url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 20,
CURLOPT_CONNECTTIMEOUT => 10,
]);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curl_err = curl_error($ch);
curl_close($ch);
if ($curl_err) {
log_message("N8N webhook ошибка curl: " . $curl_err);
echo json_encode([
"success" => "false",
"message" => "Ошибка при проверке полиса: " . $curl_err,
"result" => ""
], JSON_UNESCAPED_UNICODE);
return;
}
if ($http_code < 200 || $http_code >= 300) {
log_message("N8N webhook HTTP $http_code, body=" . substr($response, 0, 500));
echo json_encode([
"success" => "false",
"message" => "Ошибка при проверке полиса (HTTP $http_code)",
"result" => ""
], JSON_UNESCAPED_UNICODE);
return;
}
$response = trim($response);
if ($response === '') {
log_message("N8N webhook: пустой ответ (HTTP $http_code). Настройте workflow на возврат JSON: {\"success\": true/false, \"message\": \"...\", \"result\": {}}");
echo json_encode([
"success" => "false",
"message" => "Полис не найден",
"result" => ""
], JSON_UNESCAPED_UNICODE);
return;
}
$data = json_decode($response, true);
if ($data === null) {
log_message("N8N webhook: ответ не JSON, body=" . substr($response, 0, 500));
echo json_encode([
"success" => "false",
"message" => "Ошибка при проверке полиса: неверный ответ сервера",
"result" => ""
], JSON_UNESCAPED_UNICODE);
return;
}
// Поддержка двух форматов ответа N8N:
// 1) Стандартный: { "success": true/false, "message": "...", "result": {} }
// 2) Текущий workflow: { "form_data": { "policy_check": { "found": true/false, "policy_info": {} } }, "mysql_results": [{}] }
$found = false;
$result = [];
if (isset($data['success'])) {
$found = (bool)$data['success'];
$result = isset($data['result']) && is_array($data['result']) ? $data['result'] : (isset($data['result']) ? $data['result'] : []);
} elseif (isset($data['form_data']['policy_check'])) {
$pc = $data['form_data']['policy_check'];
$found = !empty($pc['found']);
$result = isset($pc['policy_info']) && is_array($pc['policy_info']) ? $pc['policy_info'] : [];
if (empty($result) && !empty($data['mysql_results'][0]) && is_array($data['mysql_results'][0])) {
$result = $data['mysql_results'][0];
}
}
log_message("N8N webhook ответ: found=" . ($found ? '1' : '0'));
$out = [
"success" => $found ? "true" : "false",
"message" => $found ? (isset($data['message']) ? (string)$data['message'] : 'Полис найден') : (isset($data['message']) ? (string)$data['message'] : 'Полис не найден'),
"result" => $result
];
echo json_encode($out, JSON_UNESCAPED_UNICODE);
return;
}
// Fallback: проверка по БД (если N8N_POLIS_WEBHOOK не задан)
$valid_tariffs_basic = [
'STB0048', 'STB1099', 'STB1100', 'STB2099', 'AVS21500', 'AVS22500'
];
$valid_tariffs_other = [
'SPV0001', 'SPV0002', 'SPV0003', 'SPV0004', 'SPV0005',
'STV0090',
'SPV1001', 'SPV1002', 'SPV1003', 'SPV1004', 'SPV1005',
'SPV2001', 'SPV2002', 'SPV2004', 'SPV2005',
'OPV1001', 'OPV1002', 'OPV1003', 'OPV1004', 'OPV1005',
'OPV2001', 'OPV2002', 'OPV2004', 'OPV2005'
];
$db_host = env('MYSQL_ERV_HOST', env('MYSQL_CRM_HOST', 'localhost'));
$db_user = env('MYSQL_ERV_USER', 'ci20465_erv');
$db_pass = env('MYSQL_ERV_PASSWORD', 'c7vOXbmG');
$db_name = env('MYSQL_ERV_DB', 'ci20465_erv');
log_message("Попытка подключения к БД: host=$db_host, user=$db_user, db=$db_name");
$link = @mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$link) {
$error = mysqli_connect_error();
log_message("Ошибка подключения к БД: $error");
echo json_encode([
"success" => "false",
"message" => "Ошибка подключения к базе данных: " . $error,
"result" => ""
], JSON_UNESCAPED_UNICODE);
return;
}
mysqli_set_charset($link, "utf8");
$inn_escaped = mysqli_real_escape_string($link, $inn);
$sql = "SELECT * FROM lexrpiority WHERE voucher = '$inn_escaped' OR voucher LIKE '$inn_escaped/%' OR voucher LIKE '$inn_escaped%' LIMIT 1";
$result = mysqli_query($link, $sql);
if (!$result) {
$error = mysqli_error($link);
log_message("Ошибка SQL: $error");
echo json_encode(["success" => "false", "message" => "Ошибка запроса к базе данных: " . $error, "result" => ""], JSON_UNESCAPED_UNICODE);
mysqli_close($link);
return;
}
$row = mysqli_fetch_assoc($result);
if (!$row) {
log_message("Полис не найден в базе данных");
echo json_encode(["success" => "false", "message" => "Полис не найден", "result" => ""], JSON_UNESCAPED_UNICODE);
mysqli_close($link);
return;
}
$tariff_basic = isset($row['tariff_code_basic']) ? trim($row['tariff_code_basic']) : '';
$tariff_other = isset($row['tariff_code_other']) ? trim($row['tariff_code_other']) : '';
$has_valid_tariff = in_array($tariff_basic, $valid_tariffs_basic) || in_array($tariff_other, $valid_tariffs_other);
if ($has_valid_tariff) {
echo json_encode(["success" => "true", "message" => "Полис найден", "result" => $row], JSON_UNESCAPED_UNICODE);
} else {
echo json_encode(["success" => "false", "message" => "Ваш полис не включает покрытие задержки рейса", "result" => ""], JSON_UNESCAPED_UNICODE);
}
mysqli_close($link);
}
?>