Получение вебхуков Xsolla
В процессе обработки покупки Xsolla отправляет вебхуки о наступлении различных событий (например, об отмене платежа, подтверждении состава корзины). Вы можете использовать эти вебхуки, чтобы:
- начислять покупки в инвентарь игрока, если вы используете собственное или стороннее решение;
- реализовать собственную логику верификации и обработки заказа для логирования информации, начисления наград, предоставления скидок за заказ и т. д.
Для получения вебхуков на стороне BaaS-сервиса добавьте в проект готовые функции, следуя инструкциям для Firebase и PlayFab.
Добавление облачной функции в проект Firebase
- Инициализируйте свой проект Firebase.
- Импортируйте функцию получения вебхуков, где
<WebhookSecretKey>
— Секретный ключ проекта, который можно найти в Личном кабинете в разделе Настройки проекта > Вебхуки.
Код функции получения вебхуков:
Copy
- javascript
const webhookSecretKey = "<WebhookSecretKey>";
exports.webhook = functions.https.onRequest((request, response) => {
const requestRawBody = request.rawBody.toString("utf-8");
const crypto = require("crypto");
const sig = "Signature " + crypto
.createHash("sha1")
.update(requestRawBody + webhookSecretKey)
.digest("hex");
if (request.headers.authorization !== sig) {
response.status(401).send();
return;
}
// TODO Replace this block with your game's logic for purchases handling
switch (request.body.notification_type) {
case "order_paid": {
const userId = request.body.user.external_id;
const skus = request.body.items.map(function(it) {
return it.sku;
}).join(", ");
const price =
`${request.body.order.amount} ${request.body.order.currency}`;
functions.logger.log(
"Order Paid\n",
`A user ${userId} has just paid ${price} for ${skus}\n`,
"Full Data\n",
request.body
);
break;
}
case "order_canceled": {
const userId = request.body.user.external_id;
const orderId = request.body.order.id;
functions.logger.log(
"Order Canceled\n",
`A user ${userId} has just canceled order ${orderId}\n`,
"Full Data\n",
request.body
);
break;
}
}
response.status(204).send();
});
- Реализуйте логику обработки вебхуков.
Примечание
Функция рассчитана для работы с вебхуками о получении состава корзины при покупке и об отмене платежа. Вы можете самостоятельно реализовать обработку других вебхуков о событиях на странице оплаты.
- Запустите функцию в боевой среде в соответствии с примером.
- В консоли Firebase перейдите в раздел
Build > Functions и скопируйте URL функции получения вебхуков. - Откройте проект в Личном кабинете.
- Перейдите в раздел Настройки проекта > Вебхуки.
- В поле Сервер для вебхуков укажите URL функции получения вебхуков.
Добавление облачного скрипта в проект PlayFab
Примечание
Сами по себе облачные скрипты PlayFab не поддерживают функции с триггерами HTTP, поэтому для реализации получения вебхуков используются функции Azure.
- Подготовьте среду разработки для работы с функциями Azure.
- Следуя примеру, добавьте функцию получения вебхуков, где
<WebhookSecretKey>
— Секретный ключ проекта, который можно найти в Личном кабинете в разделе Настройки проекта > Вебхуки.
Код функции получения вебхуков:
Copy
- javascript
const webhookSecretKey = "<WebhookSecretKey>";
module.exports = async function (context, request) {
const requestRawBody = request.rawBody.toString("utf-8");
const crypto = require("crypto");
const sig = "Signature " + crypto
.createHash("sha1")
.update(requestRawBody + webhookSecretKey)
.digest("hex");
if (request.headers.authorization !== sig) {
context.res = {
status: 401
};
return;
}
// TODO Replace this block with your game's logic for purchases handling
switch (request.body.notification_type) {
case "order_paid": {
const userId = request.body.user.external_id;
const skus = request.body.items.map(function (it) {
return it.sku;
}).join(", ");
const price =
`${request.body.order.amount} ${request.body.order.currency}`;
context.log(
"Order Paid\n" +
`A user ${userId} has just paid ${price} for ${skus}\n` +
"Full Data\n" +
JSON.stringify(request.body)
);
break;
}
case "order_canceled": {
const userId = request.body.user.external_id;
const orderId = request.body.order.id;
context.log(
"Order Canceled\n" +
`A user ${userId} has just canceled order ${orderId}\n` +
"Full Data\n" +
JSON.stringify(request.body)
);
break;
}
}
context.res = {
status: 204
};
}
- Реализуйте логику обработки вебхуков.
Примечание
Функция рассчитана для работы с вебхуками о получении состава корзины при покупке и об отмене платежа. Вы можете самостоятельно реализовать обработку других вебхуков о событиях на странице оплаты.
- Запустите функцию в боевой среде.
- Cкопируйте URL функции.
- Перейдите к настройкам проекта в PlayFab.
- Зарегистрируйте функцию облачного скрипта.
- Откройте проект в Личном кабинете.
- Перейдите в раздел Настройки проекта > Вебхуки.
- В поле Сервер для вебхуков укажите URL функции получения вебхуков.
Была ли статья полезна?
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.