246 lines
9.2 KiB
Markdown
246 lines
9.2 KiB
Markdown
|
|
# Структура проекта - Детальное описание
|
|||
|
|
|
|||
|
|
## Обзор архитектуры
|
|||
|
|
|
|||
|
|
Проект состоит из нескольких версий формы, каждая из которых может иметь свои особенности. Основная рабочая версия находится в директории `/ticket/`.
|
|||
|
|
|
|||
|
|
## Основные компоненты
|
|||
|
|
|
|||
|
|
### 1. Frontend (Клиентская часть)
|
|||
|
|
|
|||
|
|
#### `index.php`
|
|||
|
|
Главный файл формы, содержит:
|
|||
|
|
- HTML-разметку многошаговой формы
|
|||
|
|
- PHP-код для получения IP и региона пользователя
|
|||
|
|
- Интеграцию с внешними API (ip-api.com)
|
|||
|
|
- Структуру из 3 шагов:
|
|||
|
|
- Шаг 1: SMS-подтверждение и проверка полиса
|
|||
|
|
- Шаг 2: Информация о страховом случае
|
|||
|
|
- Шаг 3: Персональные данные и документы
|
|||
|
|
|
|||
|
|
#### `js/common.js`
|
|||
|
|
Основной JavaScript файл, реализует:
|
|||
|
|
- Валидацию форм на каждом шаге
|
|||
|
|
- Маски ввода (телефон, ИНН, даты, банковские реквизиты)
|
|||
|
|
- Логику переключения между шагами
|
|||
|
|
- Отправку SMS-кодов
|
|||
|
|
- Загрузку и валидацию файлов
|
|||
|
|
- Конвертацию HEIC в JPEG
|
|||
|
|
- AJAX-запросы к серверу
|
|||
|
|
- Интеграцию с DaData API для автодополнения
|
|||
|
|
|
|||
|
|
#### `css/main.css` и `css/custom.css`
|
|||
|
|
Стили для формы, включая:
|
|||
|
|
- Адаптивный дизайн
|
|||
|
|
- Стили для шагов формы
|
|||
|
|
- Стили для загрузки файлов
|
|||
|
|
- Модальные окна
|
|||
|
|
|
|||
|
|
### 2. Backend (Серверная часть)
|
|||
|
|
|
|||
|
|
#### `database.php`
|
|||
|
|
Проверка полисов в базе данных:
|
|||
|
|
- Подключение к MySQL
|
|||
|
|
- Проверка номера полиса
|
|||
|
|
- Валидация тарифов
|
|||
|
|
- Проверка сроков действия полиса
|
|||
|
|
- Возврат JSON-ответа с результатами
|
|||
|
|
|
|||
|
|
#### `sms-test.php`
|
|||
|
|
Тестирование отправки SMS:
|
|||
|
|
- Генерация кода подтверждения
|
|||
|
|
- Отправка SMS на указанный номер
|
|||
|
|
- Логирование операций
|
|||
|
|
|
|||
|
|
#### `file-server.php` (если существует)
|
|||
|
|
Обработка загрузки файлов на сервер
|
|||
|
|
|
|||
|
|
### 3. Интеграция с CRM
|
|||
|
|
|
|||
|
|
#### Основной endpoint
|
|||
|
|
`https://form.clientright.ru/server_new.php`
|
|||
|
|
|
|||
|
|
Обрабатывает:
|
|||
|
|
- Данные формы из POST-запроса
|
|||
|
|
- Загруженные файлы
|
|||
|
|
- Отправку данных в CRM через `capture.php`
|
|||
|
|
- Логирование операций
|
|||
|
|
|
|||
|
|
#### Веб-сервисы CRM
|
|||
|
|
`https://crm.clientright.ru/webservice.php`
|
|||
|
|
|
|||
|
|
Операции:
|
|||
|
|
1. **getchallenge** - получение токена
|
|||
|
|
2. **login** - авторизация и получение sessionId
|
|||
|
|
3. **CreateContact** - создание/обновление клиента
|
|||
|
|
4. **CreateAccount** - создание/обновление контрагента
|
|||
|
|
5. **CreateProject** - создание проекта
|
|||
|
|
6. **GetFilesList** - получение списка файлов клиента
|
|||
|
|
|
|||
|
|
### 4. База данных
|
|||
|
|
|
|||
|
|
#### Структура таблицы `lexrpiority`
|
|||
|
|
Поля (предположительно):
|
|||
|
|
- `inn` или `police_number` - номер полиса
|
|||
|
|
- `birthday` - дата рождения
|
|||
|
|
- `insured_from` - дата начала действия
|
|||
|
|
- `insured_to` - дата окончания действия
|
|||
|
|
- `tariff` - тариф полиса
|
|||
|
|
|
|||
|
|
#### Валидные тарифы
|
|||
|
|
|
|||
|
|
**Базовые тарифы:**
|
|||
|
|
- STB0048, STB1099, STB1100, STB2099
|
|||
|
|
- AVS21500, AVS22500
|
|||
|
|
|
|||
|
|
**Дополнительные тарифы:**
|
|||
|
|
- SPV0001-SPV0005, STV0090
|
|||
|
|
- SPV1001-SPV1005, SPV2001-SPV2005
|
|||
|
|
- OPV1001-OPV1005, OPV2001-OPV2005
|
|||
|
|
|
|||
|
|
### 5. Внешние библиотеки
|
|||
|
|
|
|||
|
|
#### JavaScript библиотеки
|
|||
|
|
- **jQuery 3.6.3** - основной фреймворк
|
|||
|
|
- **Inputmask** - маски ввода
|
|||
|
|
- **Datepicker** - выбор дат
|
|||
|
|
- **intl-tel-input** - ввод телефонных номеров
|
|||
|
|
- **Fancybox** - модальные окна
|
|||
|
|
- **heic2any** - конвертация HEIC в JPEG
|
|||
|
|
- **suggestions-jquery** - автодополнение адресов (DaData)
|
|||
|
|
|
|||
|
|
#### PHP библиотеки (Composer)
|
|||
|
|
- **PHPMailer** - отправка email
|
|||
|
|
- **FPDF/FPDI** - работа с PDF
|
|||
|
|
- **PDF Merger** - объединение PDF
|
|||
|
|
|
|||
|
|
### 6. Поток данных
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Пользователь заполняет форму
|
|||
|
|
↓
|
|||
|
|
Валидация на клиенте (JavaScript)
|
|||
|
|
↓
|
|||
|
|
Отправка данных на server_new.php
|
|||
|
|
↓
|
|||
|
|
Обработка файлов и данных
|
|||
|
|
↓
|
|||
|
|
Отправка в CRM через capture.php
|
|||
|
|
↓
|
|||
|
|
Получение sessionId через веб-сервисы
|
|||
|
|
↓
|
|||
|
|
Создание/обновление клиента (CreateContact)
|
|||
|
|
↓
|
|||
|
|
Создание/обновление контрагента (CreateAccount)
|
|||
|
|
↓
|
|||
|
|
Создание проекта (CreateProject)
|
|||
|
|
↓
|
|||
|
|
Загрузка файлов в CRM
|
|||
|
|
↓
|
|||
|
|
Отправка подтверждающего email
|
|||
|
|
↓
|
|||
|
|
Возврат результата пользователю
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Версии проекта
|
|||
|
|
|
|||
|
|
### `/ticket/` - Основная рабочая версия
|
|||
|
|
Используется в продакшене.
|
|||
|
|
|
|||
|
|
### `/ticket3/` - Альтернативная версия
|
|||
|
|
Возможно, содержит изменения или эксперименты.
|
|||
|
|
|
|||
|
|
### `/ervws/` - Версия для веб-сервисов
|
|||
|
|
Версия с акцентом на веб-сервисы.
|
|||
|
|
|
|||
|
|
### `/test/` - Тестовая версия
|
|||
|
|
Для тестирования новых функций.
|
|||
|
|
|
|||
|
|
### `/public_html/` - Публичная версия
|
|||
|
|
Публичная версия для клиентов.
|
|||
|
|
|
|||
|
|
## Конфигурация полей формы
|
|||
|
|
|
|||
|
|
### Поля клиента (data-ws_type="client")
|
|||
|
|
- `firstname` - Имя
|
|||
|
|
- `lastname` - Фамилия
|
|||
|
|
- `secondname` - Отчество
|
|||
|
|
- `mobile` - Телефон
|
|||
|
|
- `email` - Email
|
|||
|
|
- `birthday` - Дата рождения
|
|||
|
|
- `mailingstreet` - Адрес регистрации
|
|||
|
|
- `inn` - ИНН
|
|||
|
|
- `code` - SMS-код
|
|||
|
|
|
|||
|
|
### Поля проекта (data-ws_type="project")
|
|||
|
|
- `cf_1887` - Дата начала страхования (insured_from)
|
|||
|
|
- `cf_1889` - Дата окончания страхования (insured_to)
|
|||
|
|
- `cf_1899` - Код документа
|
|||
|
|
- `cf_1804` - Серия и номер документа
|
|||
|
|
- `cf_2502` - Согласие на обработку данных
|
|||
|
|
|
|||
|
|
### Поля контрагента (data-ws_type="contractor")
|
|||
|
|
- `inn` - ИНН
|
|||
|
|
- `ogrn` - ОГРН
|
|||
|
|
- `accountname` - Наименование
|
|||
|
|
- `address` - Адрес
|
|||
|
|
- `email` - Email
|
|||
|
|
- `phone` - Телефон
|
|||
|
|
- `website` - Сайт
|
|||
|
|
|
|||
|
|
### Другие поля (data-ws_type="other")
|
|||
|
|
- `cf_2446` - Флаг наличия в базе
|
|||
|
|
- `cf_1885` - Номер полиса
|
|||
|
|
- `cf_1726` - Тип события
|
|||
|
|
- `cf_2566` - Дата страхового случая
|
|||
|
|
- `cf_2568` - Номер рейса/поезда
|
|||
|
|
- `description` - Описание ситуации
|
|||
|
|
- И другие кастомные поля
|
|||
|
|
|
|||
|
|
## Безопасность
|
|||
|
|
|
|||
|
|
1. **Валидация файлов:**
|
|||
|
|
- Проверка расширений
|
|||
|
|
- Проверка MIME-типов
|
|||
|
|
- Ограничение размера (5 МБ)
|
|||
|
|
- Ограничение количества (10 файлов)
|
|||
|
|
|
|||
|
|
2. **Валидация данных:**
|
|||
|
|
- Проверка обязательных полей
|
|||
|
|
- Валидация email
|
|||
|
|
- Валидация телефона
|
|||
|
|
- Проверка форматов дат
|
|||
|
|
|
|||
|
|
3. **Защита от атак:**
|
|||
|
|
- Экранирование данных
|
|||
|
|
- Использование prepared statements (рекомендуется)
|
|||
|
|
- Валидация на сервере
|
|||
|
|
- CSRF-токены (если реализованы)
|
|||
|
|
|
|||
|
|
## Логирование
|
|||
|
|
|
|||
|
|
Логи сохраняются в:
|
|||
|
|
- `logs/logfile.log` - общие логи
|
|||
|
|
- `formlog/` - логи форм
|
|||
|
|
- JSON-файлы с префиксом `resend_log_` - логи повторной отправки
|
|||
|
|
|
|||
|
|
## Тестирование
|
|||
|
|
|
|||
|
|
### Тестовый режим формы
|
|||
|
|
Добавьте `?demodata=1` к URL для автоматического заполнения всех полей.
|
|||
|
|
|
|||
|
|
### Тестовые данные для API
|
|||
|
|
- ИНН: `643922466250`
|
|||
|
|
- СМС-код: `795372`
|
|||
|
|
|
|||
|
|
## Рекомендации по разработке
|
|||
|
|
|
|||
|
|
1. Всегда тестируйте изменения в `/test/` перед применением в продакшене
|
|||
|
|
2. Используйте версионирование для отслеживания изменений
|
|||
|
|
3. Логируйте важные операции
|
|||
|
|
4. Валидируйте данные на сервере, не только на клиенте
|
|||
|
|
5. Используйте prepared statements для SQL-запросов
|
|||
|
|
6. Регулярно проверяйте логи на ошибки
|
|||
|
|
7. Делайте резервные копии перед крупными изменениями
|
|||
|
|
|