2025-10-16 11:17:21 +03:00
|
|
|
|
<?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);
|
|
|
|
|
|
|
2025-10-16 19:07:53 +03:00
|
|
|
|
set_time_limit(150); // 2.5 минуты на запрос
|
2025-10-16 11:17:21 +03:00
|
|
|
|
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();
|
|
|
|
|
|
|
2025-10-16 19:07:53 +03:00
|
|
|
|
// Декодируем cookies как в основном файле отправки в суд
|
|
|
|
|
|
$decodedCookies = htmlspecialchars_decode($cookies);
|
|
|
|
|
|
|
2025-10-16 11:17:21 +03:00
|
|
|
|
$response = $client->request('POST', $url, [
|
|
|
|
|
|
'headers' => [
|
|
|
|
|
|
'x-api-key' => $apiKey,
|
2025-10-16 19:07:53 +03:00
|
|
|
|
'hidden-authorization-cookies' => $decodedCookies
|
2025-10-16 11:17:21 +03:00
|
|
|
|
],
|
|
|
|
|
|
'multipart' => [
|
|
|
|
|
|
[
|
|
|
|
|
|
'name' => 'fillData',
|
|
|
|
|
|
'contents' => $fillDataJson
|
|
|
|
|
|
]
|
|
|
|
|
|
],
|
2025-10-16 19:07:53 +03:00
|
|
|
|
'timeout' => 120 // Увеличен до 120 секунд из-за нестабильной работы API
|
2025-10-16 11:17:21 +03:00
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
$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
|
|
|
|
|
|
];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
?>
|
|
|
|
|
|
|