Files
crm.clientright.ru/SEND2COURT_FIXES.md
Fedor 9245768987 🚀 CRM Files Migration & Real-time Features
 Features:
- Migrated ALL files to new S3 structure (Projects, Contacts, Accounts, HelpDesk, Invoice, etc.)
- Added Nextcloud folder buttons to ALL modules
- Fixed Nextcloud editor integration
- WebSocket server for real-time updates
- Redis Pub/Sub integration
- File path manager for organized storage
- Redis caching for performance (Functions.php)

📁 New Structure:
Documents/Project/ProjectName_ID/file_docID.ext
Documents/Contacts/FirstName_LastName_ID/file_docID.ext
Documents/Accounts/AccountName_ID/file_docID.ext

🔧 Technical:
- FilePathManager for standardized paths
- S3StorageService integration
- WebSocket server (Node.js + Docker)
- Redis cache for getBasicModuleInfo()
- Predis library for Redis connectivity

📝 Scripts:
- Migration scripts for all modules
- Test pages for WebSocket/SSE/Polling
- Documentation (MIGRATION_*.md, REDIS_*.md)

🎯 Result: 15,000+ files migrated successfully!
2025-10-24 19:59:28 +03:00

5.5 KiB
Raw Permalink Blame History

Исправления 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 - название организации
  • Адреса, используемые для поиска суда

Изменения в коде:

// Было:
$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 последовательности

Изменения в коде:

// Было:
$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)
Статус: Готово к тестированию