Files
moonwell-web/docs/game-balance-integration.md

3.4 KiB

Интеграция Слёз Элуны

Слёзы Элуны хранятся в acore_auth.account_balances, поэтому сайт и игровой сервер используют один источник истины. Все движения валюты записываются в acore_auth.balance_transactions.

Курс пополнения задаётся через MOONWELL_TEARS_PER_RUBLE и по умолчанию равен 10: 1 рубль = 10 Слёз Элуны. Суммы API игрового сервера и ручные операции администратора всегда указываются в Слёзах Элуны, а не в рублях.

Robokassa

В технических настройках магазина укажите:

  • ResultURL: https://ВАШ-ДОМЕН/api/payments/robokassa/result, метод POST;
  • SuccessURL: https://ВАШ-ДОМЕН/payments/robokassa/success;
  • FailURL: https://ВАШ-ДОМЕН/payments/robokassa/fail;
  • алгоритм подписи, совпадающий с ROBOKASSA_HASH_ALGORITHM.

Доступны два независимых режима:

  • ROBOKASSA_MODE=test использует ROBOKASSA_TEST_LOGIN, ROBOKASSA_TEST_PASSWORD1, ROBOKASSA_TEST_PASSWORD2 и передаёт IsTest=1;
  • ROBOKASSA_MODE=production использует отдельные ROBOKASSA_PRODUCTION_* значения и передаёт IsTest=0.

Текущие старые переменные ROBOKASSA_LOGIN, ROBOKASSA_PASSWORD1, ROBOKASSA_PASSWORD2 поддерживаются как тестовые для обратной совместимости. Перед боевым запуском заполните production-переменные, переключите ROBOKASSA_MODE=production и выполните php artisan config:clear.

Режим сохраняется в каждом выставленном счёте. Поэтому отложенный тестовый callback продолжит проверяться тестовым Паролем №2 даже после переключения приложения в production.

API игрового сервера

Задайте длинный случайный GAME_SERVER_BALANCE_API_TOKEN и передавайте его как Authorization: Bearer TOKEN.

Получение количества Слёз Элуны:

GET /api/game/balance/7
Authorization: Bearer TOKEN

Списание:

POST /api/game/balance/7/spend
Authorization: Bearer TOKEN
Content-Type: application/json

{"amount":"25.50","idempotency_key":"shop-purchase-42","description":"Название предмета"}

idempotency_key должен быть уникальным для каждой игровой покупки. amount — количество списываемых Слёз Элуны. Повтор запроса с тем же ключом возвращает ту же операцию и не списывает валюту второй раз. Ответ 422 означает недостаточное количество или конфликт ключа; 401 — неверный серверный токен.

После развёртывания выполните php artisan migrate --force. Миграция создаёт таблицы непосредственно в подключении azerothcore_auth.