122 lines
5.5 KiB
Markdown
122 lines
5.5 KiB
Markdown
|
|
# Исправления Send2Court - 23 октября 2025
|
|||
|
|
|
|||
|
|
## Проблемы, которые были исправлены
|
|||
|
|
|
|||
|
|
### 🔴 Проблема №1: HTTP 500 - Invalid Control Characters
|
|||
|
|
**Ошибка:** `Specified value has invalid Control characters. (Parameter 'value')`
|
|||
|
|
|
|||
|
|
**Причина:** В адресах из базы данных присутствовали HTML entities (`—`, ` `, `"` и т.д.), которые попадали в JSON и отправлялись в API debex.ru. Сервер не мог обработать эти символы и возвращал ошибку 500.
|
|||
|
|
|
|||
|
|
**Пример проблемного адреса:**
|
|||
|
|
```
|
|||
|
|
362047, Республика Северная Осетия — Алания, Владикавказ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Решение:** Добавлено декодирование HTML entities с помощью функции `html_entity_decode()` для всех текстовых полей перед отправкой в API:
|
|||
|
|
- `courtNoticesAddress` - адрес для судебных уведомлений
|
|||
|
|
- `legalAddress` - юридический адрес
|
|||
|
|
- `actualResidenceAddress` - фактический адрес
|
|||
|
|
- `name` - название организации
|
|||
|
|
- Адреса, используемые для поиска суда
|
|||
|
|
|
|||
|
|
**Изменения в коде:**
|
|||
|
|
```php
|
|||
|
|
// Было:
|
|||
|
|
$data['mySelfAdditionalData']['courtNoticesAddress'] = $adb->query_result($result, 0, 'addr_notice');
|
|||
|
|
|
|||
|
|
// Стало:
|
|||
|
|
$data['mySelfAdditionalData']['courtNoticesAddress'] = html_entity_decode($adb->query_result($result, 0, 'addr_notice'), ENT_QUOTES | ENT_HTML5, 'UTF-8');
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 🔴 Проблема №2: HTTP 403 при скачивании файлов из S3
|
|||
|
|
**Ошибка:** `ошибка скачивания файла из S3, HTTP код: 403`
|
|||
|
|
|
|||
|
|
**Причина:** В именах файлов на S3 присутствовали специальные символы:
|
|||
|
|
- `#` (хештег) - интерпретируется как якорь URL
|
|||
|
|
- Пробелы
|
|||
|
|
- Кириллица в именах файлов
|
|||
|
|
- Другие спецсимволы
|
|||
|
|
|
|||
|
|
**Пример проблемного URL:**
|
|||
|
|
```
|
|||
|
|
https://s3.twcstorage.ru/.../8_Договор_на_оказание_услуг_09-04-2025-13-52-43_Чужба_10_CTP#realfile.pdf
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Решение:** Переписана функция `getTempFileFromS3()` с правильным кодированием URL:
|
|||
|
|
1. URL разбирается на части с помощью `parse_url()`
|
|||
|
|
2. Путь разбивается на сегменты по `/`
|
|||
|
|
3. Каждый сегмент кодируется с помощью `rawurlencode()`
|
|||
|
|
4. URL собирается обратно
|
|||
|
|
|
|||
|
|
Теперь символы правильно кодируются:
|
|||
|
|
- `#` → `%23`
|
|||
|
|
- Пробел → `%20`
|
|||
|
|
- Кириллица → правильные UTF-8 последовательности
|
|||
|
|
|
|||
|
|
**Изменения в коде:**
|
|||
|
|
```php
|
|||
|
|
// Было:
|
|||
|
|
$s3Url = str_replace('#', '%23', $s3Url);
|
|||
|
|
$s3Url = str_replace(' ', '%20', $s3Url);
|
|||
|
|
|
|||
|
|
// Стало:
|
|||
|
|
$urlParts = parse_url($s3Url);
|
|||
|
|
$path = isset($urlParts['path']) ? $urlParts['path'] : '';
|
|||
|
|
$pathSegments = explode('/', $path);
|
|||
|
|
$encodedSegments = array_map(function($segment) {
|
|||
|
|
return rawurlencode($segment);
|
|||
|
|
}, $pathSegments);
|
|||
|
|
$encodedPath = implode('/', $encodedSegments);
|
|||
|
|
$s3Url = $urlParts['scheme'] . '://' . $urlParts['host'] . $encodedPath;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Дополнительные улучшения
|
|||
|
|
|
|||
|
|
### Улучшенное логирование
|
|||
|
|
- Добавлен вывод размера скачанного файла
|
|||
|
|
- Добавлен вывод CURL ошибок при проблемах со скачиванием
|
|||
|
|
- Улучшены сообщения в логах для лучшей диагностики
|
|||
|
|
|
|||
|
|
### Проверка валидности данных
|
|||
|
|
- Добавлена проверка корректности URL перед попыткой скачивания
|
|||
|
|
- Добавлена проверка, что файл не пустой перед сохранением
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Файлы, которые были изменены
|
|||
|
|
|
|||
|
|
- `/var/www/fastuser/data/www/crm.clientright.ru/include/utils/Debexpert-guzzle.php`
|
|||
|
|
- Функция `Send2Court()` - добавлено декодирование HTML entities
|
|||
|
|
- Функция `getCourt()` - добавлено декодирование HTML entities в адресах
|
|||
|
|
- Функция `getTempFileFromS3()` - переписана с правильным кодированием URL
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Тестирование
|
|||
|
|
|
|||
|
|
После внедрения исправлений необходимо протестировать отправку:
|
|||
|
|
1. Искового с адресом, содержащим HTML entities (`—`, ` ` и т.д.)
|
|||
|
|
2. Проекта с файлами на S3, содержащими `#` или другие спецсимволы в имени
|
|||
|
|
3. Проекта с кириллицей в именах файлов на S3
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Мониторинг
|
|||
|
|
|
|||
|
|
Проверять логи после отправки на наличие:
|
|||
|
|
- ❌ `HTTP статус код: 500` + `Invalid Control characters`
|
|||
|
|
- ❌ `ошибка скачивания файла из S3, HTTP код: 403`
|
|||
|
|
- ✅ `файл сохранен во временную папку` + размер файла
|
|||
|
|
- ✅ `получили ответ на запрос` + номер дела
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Дата исправления:** 23 октября 2025
|
|||
|
|
**Автор:** AI Assistant (Claude)
|
|||
|
|
**Статус:** ✅ Готово к тестированию
|
|||
|
|
|