Files
erv-ticket-dev/database.php
Fedor 2c516362df feat: Secure SMS verification with Redis (Predis)
- 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
2026-01-15 15:40:13 +03:00

168 lines
6.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
/**
* Проверка полиса в базе данных
* База данных: 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);
}
?>