Files
crm.clientright.ru/GetCourtStatus.php

174 lines
7.6 KiB
PHP
Raw Normal View History

<?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
];
}
}
?>