- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
171 lines
7.3 KiB
PHP
171 lines
7.3 KiB
PHP
<?php
|
||
/**
|
||
* Эндпоинт для получения статуса обращения в ej.sudrf.ru через API Debexpert
|
||
*
|
||
* Использование:
|
||
* GET/POST: GetCourtStatus.php?registrationId=41RS0001-201-25-0001140
|
||
*
|
||
* Параметры:
|
||
* - registrationId (обязательный) - номер обращения, полученный при отправке
|
||
* - startDate (опционально) - начальная дата фильтра (формат: dd.mm.yyyy)
|
||
* - endDate (опционально) - конечная дата фильтра (формат: dd.mm.yyyy)
|
||
*/
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - старт запроса статуса обращения'.PHP_EOL, FILE_APPEND);
|
||
|
||
set_time_limit(60); // 1 минута на запрос
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', '1');
|
||
|
||
require_once 'include/utils/Debexpert-guzzle.php';
|
||
|
||
// Получаем параметры запроса
|
||
$registrationId = $_REQUEST['registrationId'] ?? null;
|
||
$startDate = $_REQUEST['startDate'] ?? null;
|
||
$endDate = $_REQUEST['endDate'] ?? null;
|
||
|
||
// Для тестирования - если не передан registrationId, используем фиксированный
|
||
if (empty($registrationId)) {
|
||
// 🧪 ТЕСТОВЫЙ НОМЕР - замените на реальный после отправки
|
||
$registrationId = '41RS0001-201-25-0001140';
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - используем тестовый номер: '.$registrationId.PHP_EOL, FILE_APPEND);
|
||
}
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - запрашиваем статус для номера: '.$registrationId.PHP_EOL, FILE_APPEND);
|
||
|
||
// Получаем статус обращения
|
||
$result = GetCourtStatus($registrationId, $startDate, $endDate);
|
||
|
||
// Возвращаем результат
|
||
header('Content-Type: application/json; charset=utf-8');
|
||
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - завершили запрос статуса'.PHP_EOL, FILE_APPEND);
|
||
|
||
/**
|
||
* Получает статус обращения из ej.sudrf.ru
|
||
*/
|
||
function GetCourtStatus($registrationId, $startDate = null, $endDate = null) {
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - начинаем получение статуса'.PHP_EOL, FILE_APPEND);
|
||
|
||
try {
|
||
// Шаг 1: Получаем cookies
|
||
$cookies = GetCookies('Prod');
|
||
|
||
if (empty($cookies) || $cookies == 'No' || $cookies == 'Не удалось получить куки') {
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - ошибка: не удалось получить cookies'.PHP_EOL, FILE_APPEND);
|
||
return [
|
||
'status' => 'ERROR',
|
||
'message' => 'Не удалось получить авторизационные cookies'
|
||
];
|
||
}
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - cookies получены'.PHP_EOL, FILE_APPEND);
|
||
|
||
// Шаг 2: Формируем fillData для фильтрации
|
||
$fillData = [
|
||
'registrationId' => $registrationId
|
||
];
|
||
|
||
if (!empty($startDate)) {
|
||
$fillData['startDate'] = $startDate;
|
||
}
|
||
if (!empty($endDate)) {
|
||
$fillData['endDate'] = $endDate;
|
||
}
|
||
|
||
$fillDataJson = json_encode($fillData, JSON_UNESCAPED_UNICODE);
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - fillData: '.$fillDataJson.PHP_EOL, FILE_APPEND);
|
||
|
||
// Шаг 3: Формируем запрос к API
|
||
$url = 'https://api-yc.explorer.debex.ru/production/gas-appeals-statuses';
|
||
$apiKey = GetKey('Prod');
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - отправляем запрос к API'.PHP_EOL, FILE_APPEND);
|
||
|
||
// Используем Guzzle
|
||
$client = new \GuzzleHttp\Client();
|
||
|
||
$response = $client->request('POST', $url, [
|
||
'headers' => [
|
||
'x-api-key' => $apiKey,
|
||
'hidden-authorization-cookies' => $cookies
|
||
],
|
||
'multipart' => [
|
||
[
|
||
'name' => 'fillData',
|
||
'contents' => $fillDataJson
|
||
]
|
||
],
|
||
'timeout' => 60
|
||
]);
|
||
|
||
$statusCode = $response->getStatusCode();
|
||
$responseBody = $response->getBody()->getContents();
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - получен ответ, HTTP код: '.$statusCode.PHP_EOL, FILE_APPEND);
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - тело ответа: '.$responseBody.PHP_EOL, FILE_APPEND);
|
||
|
||
// Парсим JSON ответ
|
||
$data = json_decode($responseBody, true);
|
||
|
||
if ($statusCode >= 200 && $statusCode < 300) {
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - статус получен успешно'.PHP_EOL, FILE_APPEND);
|
||
|
||
return [
|
||
'status' => 'OK',
|
||
'data' => $data,
|
||
'registrationId' => $registrationId
|
||
];
|
||
} else {
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - ошибка HTTP: '.$statusCode.PHP_EOL, FILE_APPEND);
|
||
|
||
return [
|
||
'status' => 'ERROR',
|
||
'message' => 'HTTP ошибка: '.$statusCode,
|
||
'response' => $data
|
||
];
|
||
}
|
||
|
||
} catch (\GuzzleHttp\Exception\RequestException $ex) {
|
||
// Обработка ошибок HTTP запроса
|
||
$errorMessage = $ex->getMessage();
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - ошибка запроса: '.$errorMessage.PHP_EOL, FILE_APPEND);
|
||
|
||
// Пытаемся получить тело ответа
|
||
if ($ex->hasResponse()) {
|
||
$response = $ex->getResponse();
|
||
$statusCode = $response->getStatusCode();
|
||
$responseBody = (string) $response->getBody();
|
||
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - HTTP статус код: '.$statusCode.PHP_EOL, FILE_APPEND);
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - тело ответа: '.$responseBody.PHP_EOL, FILE_APPEND);
|
||
|
||
return [
|
||
'status' => 'ERROR',
|
||
'message' => $errorMessage,
|
||
'http_code' => $statusCode,
|
||
'response_body' => $responseBody
|
||
];
|
||
}
|
||
|
||
return [
|
||
'status' => 'ERROR',
|
||
'message' => $errorMessage
|
||
];
|
||
|
||
} catch (Exception $ex) {
|
||
// Общая обработка ошибок
|
||
$errorMessage = $ex->getMessage();
|
||
file_put_contents('logs/court_status.log', date('Y-m-d H:i:s').' - неожиданная ошибка: '.$errorMessage.PHP_EOL, FILE_APPEND);
|
||
|
||
return [
|
||
'status' => 'ERROR',
|
||
'message' => $errorMessage
|
||
];
|
||
}
|
||
}
|
||
|
||
?>
|
||
|