Перейти к основному содержимому

Webhooks / Вебхуки

Отслеживайте события GamePush через Вебхуки.

Вам пригодится получать нотификации на ваш сервер, например, при обработке платежей. Мы уведомим, когда игрок совершит платеж, чтобы вы могли обработать покупку и начислить награду игроку.

Добавить Вебхук

Сначала нужно добавить секретный ключ, чтобы можно было проверять достоверность данных уведомления.

  1. Перейдите в Проект > Публичная зона
  2. В поле Секретный ключ нажмите "Создать ключ".

Теперь создайте Вебхук:

  1. Перейдите в Проект > Доверенные сайты > Webhooks
  2. В разделе Webhooks создайте Вебхук.
    • Укажите ссылку, которая будет принимать запросы с нашего сервера.
    • Если вам нужно отслеживать тестовые запросы, пометьте галкой "Тестовый".
    • Через кнопку "Настройки уведомлений" выберите необходимые вам уведомления, которые мы будем присылать.
    • Добавьте Вебхук.

Концепция

info

Вебхук отправляется через http протокол методом POST в формате Base64, в котором содержится JSON.

На каждое действие соверщенное игроком и отмеченное вами, мы посылаем данные на ваш сервер в Base64 формате, в котором содержится JSON, пример:

{
"event": "GivePlayerReward",
"player": {
"id": 1820283,
"name": "",
"avatar": "",
"projectId": 4,
"credentials": "",
"platformType": "NONE",
"active": true,
"removed": false,
"test": false,
"modifiedAt": "2024-04-26T11:34:23.415923998Z"
},
"result": {
"__typename": "PlayerReward",
"countAccepted": 0,
"countTotal": 1,
"rewardId": 685
},
"time": "2024-04-26T11:34:23.415923998Z"
}

Поля нагрузки:

  • event - тип события.
  • palyer - игрок, от лица которого был сделан запрос.
  • result - результат операции. В отличии от API, мы не уведомляем при ошибке. В результате всегда приходит успешное действие.
  • time - время совершения операции.

Все типы результатов доступны в интроспекции. Все хуки возвращают такой же результат операции, что и ответ от API. Чтобы посмотреть схему или поработать в песочнице воспользуйтесь расширением для Chrome - Altair GraphQL Client.

API доступен по адресу

https://api.gamepush.com/gs/api/graphql

Получение результата

Результат приходит в Base64 с подписью разделенный ., например:

eyJ2YWx1ZSI6ICJzb21lIHJlYWwgZGF0YSJ9.cmVhbHNlY3JldGtleQ==

Первая часть - данные запроса, вторая часть - подпись.

Пример извлечения данных на JavaScript:

const body = 'eyJ2YWx1ZSI6ICJzb21lIHJlYWwgZGF0YSJ9.cmVhbHNlY3JldGtleQ==';
const [base64payload, signature] = body.split('.');
const payload = JSON.parse(atob(base64payload));
console.log(payload.event);

Проверка подписи

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

Для проверки подписи необходимо сравнить ваш SHA256 хэш с тем, что пришел в хуке.

Подпись SHA256 формируется из строки:

base64payload_secretKey
  • base64payload - первая часть запроса до .;
  • secretKey - ваш секретный токен, созданный специально для проекта.

Пример проверки подписи на JavaScript:

// Подключаем библиотеку для содания подписи
import crypto from 'crypto';
// Ваш секретный ключ проекта
const secretKey = 'Be$T_Pr0jeCt';

// Тело запроса отправленного сервером GamePush
const body = 'eyJ2YWx1ZSI6ICJzb21lIHJlYWwgZGF0YSJ9.cmVhbHNlY3JldGtleQ==';
// Получаем нагрузку и подпись из тела
const [base64payload, signature] = body.split('.');

// Подготавливаем данные для подписи
const signData = `${base64payload}_${secretKey}`;
// Формируем подпись
const hash = crypto.createHash('sha256').update(signData);
// Сверяем подпись
if (hash !== signature) {
// Кто-то хитрит
res.status(400);
res.send('Bad request');
return;
}

// Получаем данные и продолжаем работу
const payload = JSON.parse(atob(base64payload));
console.log(payload.event);

События

Тип событияОписание
PurchasePlayerPurchaseИгрок совершил покупку / оформил подписку
ConsumePlayerPurchaseИгрок использовал покупку
UnsubscribePlayerSubscriptionИгрок отписался от подписки
ResumePlayerSubscriptionИгрок возобновил подписку
ExpirePlayerSubscriptionПодписка игрока просрочилась
UnlockPlayerAchievementИгрок разблокировал достижение
PlayerSetAchievementProgressИгрок установил прогресс достижения
PlayerPublishRecordИгрок опубликовал рекорд
SyncPlayerИгрок синхронизировал прогресс
GetPlayerИгрок загрузил прогресс
GivePlayerRewardИгроку выдана награда
PlayerSendInviteToChannelИгрок отправил приглашение в канал
PlayerCancelInviteToChannelИгрок отменил приглашение в канал
PlayerAcceptInviteToChannelИгрок принял приглашение в канал
PlayerRejectInviteToChannelИгрок отклонил приглашение в канал
PlayerJoinChannelИгрок присоединился к каналу
PlayerLeaveChannelИгрок покинул канал
PlayerCancelJoinChannelИгрок отменил запрос на присоединение к каналу
PlayerAcceptJoinRequestToChannelИгрок принял запрос на присоединение к каналу
PlayerRejectJoinRequestToChannelИгрок отклонил запрос на присоединение к каналу
PlayerKickFromChannelИгрок исключил игрока из канала
PlayerSendPersonalMessageИгрок отправил личное сообщение
PlayerSendFeedMessageИгрок отправил сообщение в канал
PlayerSendMessageИгрок отправил сообщение
PlayerEditMessageИгрок отредактировал сообщение
PlayerDeleteMessageИгрок удалил сообщение
PlayerMutePlayerInChannelИгрока замьютили в канале
PlayerUnmutePlayerInChannelИгрока размьютили в канале
PlayerCreateChannelИгрок создал канал
PlayerUpdateChannelИгрок обновил канал
PlayerDeleteChannelИгрок удалил канал
UploadPlayerFileИгрок загрузил файл
UploadPlayerImageИгрок загрузил изображение

Оставайтесь на связи

С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: [email protected]

Желаем вам успехов!