Начисление предметов в инвентарь на базе решения Xsolla

Xsolla предоставляет решение для реализации инвентаря игрока на базе продукта In-Game Store (Player Inventory). Это решение позволяет синхронизировать все покупки и премиальные награды пользователя на разных платформах.

Вы можете начислять в Инвентарь игрока предметы, купленные с помощью стороннего платежного интерфейса (например, Google Play In-App Purchase).

Предметы начисляются в инвентарь при вызове серверного метода API Grant items to users. Если для серверной части приложения вы используете Firebase, используйте готовую облачную функцию:

  1. Добавьте облачную функцию в проект Firebase.
  2. Реализуйте логику вызова функции.

Добавление облачной функции в проект Firebase

  1. Инициализируйте свой проект Firebase.
  2. Импортируйте функцию начисления предметов в инвентарь, где:

    • <MerchantID>ID продавца, который можно найти в Личном кабинете:
      • в разделе Настройки проекта > Вебхуки;
      • разделе Настройки компании > Компания;
      • адресной строке браузера на любой странице Личного кабинета. URL-адрес имеет вид `https://publisher.xsolla.com/​ID продавца/раздел Личного кабинета`.

    • <ProjectID>ID проекта, который можно найти в Личном кабинете:
      • рядом с названием проекта;
      • в разделе Настройки проекта > ID проекта.

    • <ApiKey>Ключ API, который можно создать в Личном кабинете в разделе Настройки компании > Ключи API или Настройки проекта > Ключи API.
Внимание

Подробная информация о работе с ключами API приведена в справочнике API.

Основные рекомендации:

  • Сохраните созданный ключ API на вашей стороне. Вы можете посмотреть ключ API в Личном кабинете только один раз при его создании.
  • Никому не сообщайте ваш ключ API, так как он дает доступ к управлению аккаунтом и проектами в Личном кабинете.
  • Ключ API должен храниться на вашем сервере и никогда — в бинарных файлах или на фронтенде.

Код функции начисления предметов в инвентарь:
Copy
Full screen
Small screen
const merchantId = "<MerchantID>";
const projectId = "<ProjectID>";
const apiKey = "<ApiKey>";

exports.redeem = functions.https.onRequest((request, response) => {
  const sku = request.body.sku;
  const quantity = request.body.quantity;
  const userId = request.body.user_id;

  const authHeader = Buffer.from(`${merchantId}:${apiKey}`).toString("base64");

  const postData = JSON.stringify(
      [{
        "comment": "Purchased by Google Pay",
        "platform": "xsolla",
        "user": {
          "id": userId,
        },
        "items": [{
          "sku": sku,
          "quantity": quantity,
        }],
      }]
  );

  const options = {
    hostname: "store.xsolla.com",
    port: 443,
    path: `/api/v2/project/${projectId}/inventory/reward`,
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": postData.length,
      "Authorization": `Basic ${authHeader}`,
    },
  };

  const req = https.request(options, (res) => {
    if (res.statusCode == 200) {
      response.status(200).send();
      return;
    }
    if (res.statusCode == 404) {
      response.status(404).send();
      return;
    }
    if (res.statusCode == 401) {
      response.status(401).send();
      return;
    }
    response.status(400).send();

    res.on("data", (d) => {
      process.stdout.write(d);
    });
  });
  req.on("error", (e) => {
    response.status(500).send(e.message);
  });

  req.write(postData);
  req.end();
});
  1. Запустите функцию в боевой среде в соответствии с примером.

Вызов функции из приложения

Чтобы начислить предметы в инвентарь, добавьте логику для вызова функции из приложения, укажите имя функции — redeem, передайте в нее параметры sku, quantity, user_id.

Для некоторых платежных интерфейсов (например, Google Play In-App Purchase) требуется, чтобы логика начисления предмета в инвентарь инициировалась на клиенте приложения. В этом случае реализуйте клиентский метод вызова функции redeem.

В качестве примера реализации для Android вы можете использовать модуль xsolla-googleplay-sdk, позволяющий начислять в инвентарь покупки из Google Play In-App Purchase.

Чтобы применить пример в своем проекте:

  1. Запустите Android Studio.
  2. В свой проект добавьте модуль xsolla-googleplay-sdk.
  3. Инициализируйте библиотеку. Для этого добавьте следующую строку в ваш исходный код проекта Android, где <your-deployment-host> — хост URL-адреса облачной функции (например, https://us-central1-xsolla-sdk-demo.cloudfunctions.net):

Copy
Full screen
Small screen
InventoryAdmin.init("<your-deployment-host>")

URL-адрес облачной функции выводится в командной строке Firebase после запуска функции в боевой среде. Также URL-адрес функции доступен в консоли Firebase в разделе Functions > Dashboard.

  1. Реализуйте вызов метода InventoryAdmin.grantItemToUser (sku, userId, quantity, callback) согласно логике приложения. Данные об успешности начисления товара в инвентарь возвращает функция обратного вызова.
Была ли статья полезна?
Спасибо!
Что может сделать страницу еще лучше? Сообщение
Жаль, что так произошло
Расскажите, почему статья не была полезна. Сообщение
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.
Оценить страницу
Оценить страницу
Что может сделать страницу еще лучше?

В другой раз

Спасибо за обратную связь!
Последнее обновление: 22 января 2024

Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.

Сообщите о проблеме
Мы постоянно улучшаем качество нашей документации. Ваш отзыв поможет нам в этом.
Укажите email-адрес, чтобы мы могли связаться с вами
Спасибо за обратную связь!