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