- Added Predis library for Redis connection (no PHP extension required) - Server-side SMS code generation and storage in Redis - Rate limiting and brute-force protection - Integration with n8n webhook for SMS sending - Environment variables moved to .env file - Fixed policy verification endpoint - Added file-based fallback if Redis unavailable
168 lines
6.5 KiB
PHP
168 lines
6.5 KiB
PHP
<?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)) {
|
||
@mkdir($log_dir, 0755, true);
|
||
}
|
||
|
||
function log_message($message) {
|
||
global $log_file;
|
||
$timestamp = date('Y-m-d H:i:s');
|
||
@file_put_contents($log_file, "[$timestamp] $message\n", FILE_APPEND);
|
||
}
|
||
|
||
if(isset($_POST['action']) && !empty($_POST['action'])) {
|
||
$action = $_POST['action'];
|
||
switch($action) {
|
||
case 'user_verify' : user_verify(); break;
|
||
}
|
||
exit; // Важно! Завершаем выполнение после обработки действия
|
||
}
|
||
|
||
function user_verify() {
|
||
|
||
// Тарифы, которые включают покрытие задержки рейса
|
||
$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'
|
||
];
|
||
|
||
// Получаем креды из .env (с fallback на старые значения для обратной совместимости)
|
||
$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");
|
||
log_message("Подключение к БД успешно");
|
||
|
||
$inn = isset($_POST['inn']) ? trim($_POST['inn']) : '';
|
||
|
||
if (empty($inn)) {
|
||
log_message("Номер полиса не указан");
|
||
echo json_encode([
|
||
"success" => "false",
|
||
"message" => "Номер полиса не указан",
|
||
"result" => ""
|
||
], JSON_UNESCAPED_UNICODE);
|
||
mysqli_close($link);
|
||
return;
|
||
}
|
||
|
||
log_message("Проверка полиса: " . substr($inn, 0, 5) . "***");
|
||
|
||
// Нормализуем номер полиса: заменяем кириллическую "Е" на латинскую "E"
|
||
// Это нужно, т.к. в базе данных используются только латинские буквы
|
||
$inn_original = $inn;
|
||
$inn = str_replace('Е', 'E', $inn); // Кириллическая Е -> латинская E
|
||
$inn = str_replace('е', 'e', $inn); // Кириллическая е -> латинская e (на всякий случай)
|
||
$inn = str_replace('А', 'A', $inn); // Кириллическая А -> латинская A
|
||
$inn = str_replace('а', 'a', $inn); // Кириллическая а -> латинская a
|
||
|
||
if ($inn_original !== $inn) {
|
||
log_message("Номер полиса нормализован: $inn_original -> $inn");
|
||
}
|
||
|
||
// Экранируем для безопасности
|
||
$inn_escaped = mysqli_real_escape_string($link, $inn);
|
||
|
||
// Ищем полис по номеру voucher
|
||
$sql = "SELECT * FROM lexrpiority WHERE voucher = '$inn_escaped' LIMIT 1";
|
||
log_message("SQL запрос: SELECT * FROM lexrpiority WHERE voucher = '***'");
|
||
|
||
$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;
|
||
}
|
||
|
||
log_message("Полис найден в БД. Тарифы: basic=" . ($row['tariff_code_basic'] ?? 'нет') . ", other=" . ($row['tariff_code_other'] ?? 'нет'));
|
||
|
||
// Полис найден, проверяем тариф
|
||
$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) {
|
||
// Полис найден и тариф подходит
|
||
log_message("Полис валиден. Тариф подходит для задержки рейса");
|
||
echo json_encode([
|
||
"success" => "true",
|
||
"message" => "Полис найден",
|
||
"result" => $row
|
||
], JSON_UNESCAPED_UNICODE);
|
||
} else {
|
||
// Полис найден, но тариф не включает покрытие задержки рейса
|
||
log_message("Полис найден, но тариф не подходит для задержки рейса");
|
||
echo json_encode([
|
||
"success" => "false",
|
||
"message" => "Ваш полис не включает покрытие задержки рейса",
|
||
"result" => ""
|
||
], JSON_UNESCAPED_UNICODE);
|
||
}
|
||
|
||
mysqli_close($link);
|
||
}
|
||
|
||
?>
|