Своя выдача доната через HTTP API: DayZ, Project Zomboid и alt:V
Для Minecraft, Rust и Unturned у aDonate есть готовые плагины. Для DayZ, Project Zomboid и alt:V выдачу пишет администратор сервера: небольшой скрипт или мод раз в несколько секунд спрашивает у API оплаченные покупки игроков онлайн, выполняет их команды и подтверждает выдачу. Ниже - как устроен этот обмен.
Как это работает
- Раз в 15 секунд и при входе игрока ваш скрипт отправляет в API список игроков, которые сейчас на сервере.
- API отдаёт их оплаченные покупки с готовыми командами выдачи.
- Скрипт выполняет команды и подтверждает каждую выдачу.
- Если выдать не получилось, скрипт сообщает об этом, и 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.