Технические вопросы
Ответы по установке клиента, GraphQL API, настройкам проекта, безопасности, платежам и диагностике.
Установка и конфигурация клиента
1. Где настраивается подключение клиента?
Локальные параметры находятся в src/config.php: база данных, URL публичного API, cookie-домен, globalSalt и системные пути. Проектные настройки управляются в панели.
2. Нужно ли вручную редактировать проектные настройки на клиенте?
Нет. Игровые серверы, меню, платежи, модули, визуальная тема и другие проектные параметры меняются в SaaS-панели и загружаются в клиент штатным механизмом.
3. Что такое globalSalt?
Это уникальная соль конкретной установки для защиты CSRF/cookie-значений. Установщик создаёт её локально; между сайтами её не копируют.
4. Что делать, если ошибка говорит, что globalSalt required?
Проверьте, что в src/config.php заполнен $config['globalSalt']. Для новой установки вернитесь в установщик; для действующего сайта не заменяйте значение без необходимости, чтобы не сбросить сессии.
5. Какие версии PHP и MySQL использовать?
Используйте актуальные версии PHP и MySQL, соответствующие текущему релизу клиента и хостингу. Для локальной разработки в OpenServer используется MySQL 8.4.
6. Можно ли запускать клиент за Nginx?
Да. Настройте rewrite на публичную точку входа и закройте прямой доступ к непубличным директориям, логам и временным файлам.
GraphQL API
7. Как выполняется запрос к API?
Все публичные вызовы идут методом POST на /graphql и содержат только documentId и variables.
{
"documentId": "me",
"variables": {}
}
8. Можно ли отправлять поле query?
Нет. Публичные клиенты не отправляют произвольный GraphQL-документ. Используйте только документированные имена операций.
9. Какие заголовки обязательны?
Минимально нужны Content-Type: application/json и X-Project-Context со значением identity.contextToken из актуальной конфигурации проекта. Для авторизованных операций добавьте Authorization: Bearer <sessionId>.
10. Как передать выбранный сервер?
Авторизованный кабинет меняет сервер документом changeServer, после чего выбор хранится в серверной сессии. Публичные каталоги и целевые запросы передают variables.gameServerId; сервер должен принадлежать проекту из X-Project-Context.
11. Нужно ли передавать платформу?
Нет. API определяет платформу и login server по выбранному серверу и конфигурации проекта.
12. Как получить сессию?
Выполните login. В ответе придёт sessionId, который передаётся в Authorization.
13. Как работает восстановление пароля?
Сначала вызовите sendPasswordRecoveryEmail, затем confirmPasswordRecoveryCode. Код восстановления одноразовый и действует только в рамках текущего проекта.
14. Почему getGameCredentials может требовать PIN?
Просмотр игрового пароля - чувствительная операция. Если для проекта или пользователя включена PIN-защита, передайте pin вместе с accountLogin.
Безопасность
15. Можно ли передавать секретные ключи в браузер?
Нет. Браузерные запросы используют только публичный GraphQL API, сессию пользователя и публичный контекст проекта. Секреты интеграций, платежей и провайдеров не должны попадать в клиентский код.
16. Где хранить ключи платежей и провайдеров?
В настройках проекта или защищённом хранилище, если оно подключено. Не храните их в шаблонах, JavaScript, URL, логах и публичных файлах.
17. Как логировать ошибки безопасно?
Записывайте в журнал documentId, код ответа HTTP, категорию ошибки и X-Request-Id. Маскируйте email, токены, PIN, пароли, кошельки и платёжные реквизиты.
18. Что делать при подозрении на утечку ключа?
Перевыпустите данные конкретной интеграции в панели, обновите клиентский релиз при необходимости, очистите публичные логи и проверьте последние действия в журнале.
Платежи
19. Платёж создан, но не зачислен. Что проверить?
Проверьте статус счёта, callback/webhook URL у агрегатора, валюту, сумму, выбранный проект и доступность сайта извне.
20. Что означает ошибка подписи платежа?
Обычно это несовпадение секретного ключа, неверный merchant id, неправильная валюта или callback от другого профиля оплаты.
21. Можно ли использовать разные платежные настройки на серверах?
Да. Проект может иметь общие платежные настройки и серверные переопределения, если это предусмотрено выбранным сценарием.
Игровые аккаунты и серверы
22. Почему не отображаются персонажи?
Проверьте выбранный в сессии сервер, привязку игрового аккаунта, подключение к игровому источнику данных и наличие персонажей на сервере.
23. Почему нельзя привязать игровой аккаунт?
Возможные причины: неверный пароль, аккаунт уже привязан, выбран неправильный сервер, достигнут лимит аккаунтов или требуется PIN.
24. Почему пункт меню модуля не отображается?
Проверьте, куплен ли модуль, включён ли он для проекта/сервера и разрешён ли пункт в настройках меню.
Аналитика и лаунчер
25. Как работает веб-аналитика?
Откройте Журнал -> Веб-аналитика: здесь показаны посещения, аудитория, скорость страниц, формы, нажатия и ошибки сайта. Поля и примеры всех вкладок описаны в руководстве.
26. Почему лаунчер или сайт не пишет аналитику?
Для сайта проверьте основной адрес API, подключение проекта и выбранные даты отчёта. Отдельный адрес веб-аналитики не требуется. Блокировка сбора браузером и отсутствие подходящих посещений также влияют на результат. Настройки и отчёты лаунчера проверяются отдельно.
Диагностика
27. Что приложить к обращению в поддержку?
Укажите домен, ID проекта, ID команды, сервер, время ошибки, шаги воспроизведения, скриншот, documentId и X-Request-Id, если запрос связан с API.
28. Как проверить, что документация соответствует API?
Сверьте используемый documentId со справочником API и проверьте пример тела запроса в разделе конкретной операции.
29. Что делать, если после переноса сайта недоступны обновления?
Проверьте, была ли перенесена папка internal_data. Если служебная идентификация установки потеряна, отзовите старую установку в карточке проекта, создайте новый одноразовый код и повторно подключите сайт через локальную админку клиента. Пользовательские данные и текущая версия сайта при этом не удаляются.