Webhooks / Вебхуки
Отслеживайте события GamePush через Вебхуки.
Вам пригодится получать нотификации на ваш сервер, например, при обработке платежей. Мы уведомим, когда игрок совершит платеж, чтобы вы могли обработать покупку и начислить награду игроку.
Добавить Вебхук
Сначала нужно добавить секретный ключ, чтобы можно было проверять достоверность данных уведомления.
- Перейдите в Проект > Публичная зона
- В поле Секретный ключ нажмите "Создать ключ".
Теперь создайте Вебхук:
- Перейдите в Проект > Доверенные сайты > Webhooks
- В разделе Webhooks создайте Вебхук.
- Укажите ссылку, которая будет принимать запросы с нашего сервера.
- Если вам нужно отслеживать тестовые запросы, пометьте галкой "Тестовый".
- Через кнопку "Настройки уведомлений" выберите необходимые вам уведомления, которые мы будем присылать.
- Добавьте Вебхук.
Концепция
Вебхук отправляется через 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]
Желаем вам успехов!