Files
crm.clientright.ru/GetCourtStatus.php
Fedor 1f0a9b56f1 Увеличен таймаут API получения статусов до 120 секунд
- Изменен timeout с 60 до 120 секунд в GetCourtStatus.php
- API Debexpert работает нестабильно, часто таймаутит
- Успешные запросы подтверждают, что endpoint работает корректно
- Увеличенный таймаут даст больше шансов получить ответ
2025-10-16 19:07:53 +03:00

174 lines
7.6 KiB
PHP
Raw Permalink 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
/**
* Эндпоинт для получения статуса обращения в 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(150); // 2.5 минуты на запрос
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();
// Декодируем cookies как в основном файле отправки в суд
$decodedCookies = htmlspecialchars_decode($cookies);
$response = $client->request('POST', $url, [
'headers' => [
'x-api-key' => $apiKey,
'hidden-authorization-cookies' => $decodedCookies
],
'multipart' => [
[
'name' => 'fillData',
'contents' => $fillDataJson
]
],
'timeout' => 120 // Увеличен до 120 секунд из-за нестабильной работы API
]);
$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
];
}
}
?>