К содержимому
aDonate.
alt:V · Project Zomboid · DayZ

Своя выдача доната через HTTP API: DayZ, Project Zomboid и alt:V

Для Minecraft, Rust и Unturned у aDonate есть готовые плагины. Для DayZ, Project Zomboid и alt:V выдачу пишет администратор сервера: небольшой скрипт или мод раз в несколько секунд спрашивает у API оплаченные покупки игроков онлайн, выполняет их команды и подтверждает выдачу. Ниже - как устроен этот обмен.

Как это работает

  1. Раз в 15 секунд и при входе игрока ваш скрипт отправляет в API список игроков, которые сейчас на сервере.
  2. API отдаёт их оплаченные покупки с готовыми командами выдачи.
  3. Скрипт выполняет команды и подтверждает каждую выдачу.
  4. Если выдать не получилось, скрипт сообщает об этом, и API предложит покупку снова позже.

Сервер сам обращается к aDonate по HTTPS: входящие порты не нужны. Покупки игроков не в сети ждут в API, а владелец видит их в кабинете как ещё не выданные.

Ключ и адрес

Ключ создаётся в разделе «Плагин и API» и передаётся в заголовке X-Adonate-Key, адрес API - https://adonate.app. Один ключ - один сервер. Ключ открывает корзины, заказы и выдачу магазина, поэтому храните его только на сервере.

Запросы

Забрать покупки игроков онлайн:

POST https://adonate.app/v1/plugin/deliveries/claim
X-Adonate-Key: adk_…
Content-Type: application/json

{"players": ["76561198000000001"], "limit": 50}

В ответе - claimToken и список items: у каждой выдачи есть id, player, товар, вариант, количество и commands с уже подставленными значениями. После выдачи подтвердите её тем же токеном:

POST https://adonate.app/v1/plugin/deliveries/dlv_…/complete

{"claimToken": "clm_…"}

Если выдать не получилось, вызовите fail с причиной. retry: true вернёт покупку в очередь с растущей паузой, retry: false закроет её как невыданную, и владелец увидит причину в заказе. Раз в минуту можно отправлять heartbeat с числом игроков: кабинет покажет сервер в мониторинге.

Команды выдачи и переменные

Команды товара задаются в кабинете во вкладке «Выдача», API подставляет значения при оплате:

ПеременнаяЗначение
{player}ID игрока: SteamID64 в DayZ и Project Zomboid, ID персонажа в alt:V
{steamid}SteamID64 игрока в DayZ и Project Zomboid
{quantity}Количество в строке заказа
{duration}Срок варианта в днях или пусто
{order}ID заказа

Подставленные значения состоят только из латинских букв, цифр, _ и -, поэтому текст магазина не может сломать команду. Если у товара есть отдельные команды для сервера или варианта, API сам отдаёт самые точные из них.

Как не выдать покупку дважды

API гарантирует выдачу как минимум один раз: покупка предлагается снова, пока её не подтвердили. От двойной выдачи защищает журнал на вашей стороне.

  • Перед выдачей проверьте, нет ли id в журнале выданных. Если есть, только подтвердите.
  • После выдачи сразу запишите id в журнал и вызовите complete, не копите подтверждения до конца пачки.
  • Храните журнал не меньше суток в файле или базе сервера.
  • Выполняйте команды через консольный API игры, а не через оболочку операционной системы.

Где выполнять команды в каждой игре

  • Project Zomboid. Команды консоли сервера вроде additem и addxp принимают имя игрока на сервере, а покупка приходит со SteamID64: скрипт выдачи сопоставляет их сам, например по списку игроков онлайн. Выполнять команды можно через RCON сервера, к которому подключён ваш скрипт.
  • DayZ. У игры нет консольных команд для выдачи предметов, поэтому выдачу делает ваш серверный мод: он получает покупки из API и создаёт предметы игроку.
  • alt:V. Серверный ресурс на JavaScript или C# делает запросы к API и выдаёт покупку функциями вашего игрового режима. {player} здесь - ID персонажа, который игрок указал при покупке.

Полное описание методов, ошибок и лимитов - в документации API.

ЕСТЬ ВОПРОСЫ?

Вопросы по теме

Всё, что стоит знать
перед подключением.

01Есть ли у aDonate готовый плагин для DayZ, Project Zomboid или alt:V?

Пока нет. Готовые плагины есть для Minecraft, Rust и Unturned, а остальные игры подключаются своей выдачей через HTTP API.

02Нужно ли открывать порт на сервере?

Нет. Ваш скрипт сам обращается к aDonate по HTTPS, входящие соединения не нужны.

ВАШ СЛЕДУЮЩИЙ ШАГ

Ваш сервер. Ваш магазин.

Магазин, касса и выдача на сервер настраиваются в одном кабинете. Абонентской платы нет.

Создать магазин