In-Game Store / Инвентарь. Предметы с ограниченным сроком действия
  На главную

In-Game Store

Инвентарь. Предметы с ограниченным сроком действия

Как это работает

Предмет с ограниченным сроком действия — это премиумный бонус, который пользователь покупает единоразово. Чтобы получить бонус повторно, пользователь должен снова купить такой предмет.

Основные возможности:

  • Предмет с ограниченным сроком действия можно продавать неограниченное количество раз.
  • При повторной продаже предмета в инвентаре пользователя количество товаров не меняется, время истечения действия предмета увеличивается.
  • Вы можете настраивать срок действия предмета в Личном кабинете.

Ограничения:

  • Управление предметами с ограниченным сроком действия возможно только с сервера игры.

Примечание
Если вы хотите ограничить время отображения предмета в магазине, воспользуйтесь инструкцией Как настроить ограничение времени отображения товаров в магазине.

Для кого подходит

  • Для партнеров, которые уже подключили Магазин и хотят настроить новый тип товара — предметы с ограниченным сроком действия.
  • Для партнеров, которые хотят продавать Season Pass, Battle Pass или другие виды товаров, в которых необходимо дать пользователю дополнительные преимущества в игре или дополнительный контент (например, предметы или задания в игре) на ограниченный период времени.

Как настроить

Предварительные действия

Если у вас еще не подключен продукт Xsolla Store, выполните следующие действия:

  1. Создайте Личный кабинет Xsolla.
  2. Перейдите в Проекты и нажмите Создать проект.
  3. Добавьте Название проекта и нажмите Создать.
  4. Подключите магазин к проекту.
  5. Подключите модуль Виртуальные предметы.

Сценарий интеграции

  1. Создайте группу товаров.
  2. Создайте товары:
    1. При создании предмета выберите тип Предметы с ограниченным сроком действия.
    2. Укажите срок действия.

  1. Реализуйте получение предметов с ограниченным сроком действия в каталоге.
  2. Реализуйте методы для покупки предметов с ограниченным сроком действия.

Получение предметов с ограниченным сроком действия в каталоге

Реализуйте вызов метода Get virtual items list, чтобы отобразить полный список виртуальных предметов, добавленных в ваш магазин.

ПРИМЕР

Copy
Full screen
Small screen
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/items/virtual_items?locale=en");

xhr.send(data);

//RESPONSE

"items": [
    {
      "attributes": [],
      "description": "Conquer your foes with vindication using the Basic Blaster! ",
      "groups": [
        "all",
        "featured",
        "Xsolla",
        "weapons"
      ],
      "image_url": "https://cdn.xsolla.net/img/misc/images/0c59a7698d4f66c1008b27ee752089b7.png",
      "is_free": false,
      "name": "Xsolla Basic Blaster 1",
      "order": 1,
      "price": {
        "amount": "0.9950000000000000",
        "amount_without_discount": "1.9900000000000000",
        "currency": "USD"
      },
      "sku": "gun_1",
      "type": "virtual_good"

Покупка предмета с ограниченным сроком действия

При первой покупке предмет с ограниченным сроком действия начисляется в инвентарь.

При повторной покупке:

  1. Если предмет с ограниченным сроком действия активен, к текущему периоду истечения предмета добавляется дополнительное время.
  2. Если предмет с ограниченным сроком действия неактивен, период истечения срока действия предмета устанавливается заново.

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

Get cart

Реализуйте вызов метода Get cart by ID или Get current user’s cart для покупки виртуальных товаров. Cart ID будет использоваться для добавления/удаления товаров.

ПРИМЕР

Copy
Full screen
Small screen
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/cart/custom_id?locale=en&currency=USD");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE

{
  "cart_id": "custom_id",
  "is_free": true,
  "items": [],
  "price": null
}
Примечание
Для быстрой покупки товара без создания корзины используйте метод Create order with specified item.

Create order with all items

  1. Реализуйте вызов метода:
    1. Create order with all items from particular cart, если была получена корзина по ID.
    2. Create order with all items from current cart, если была получена текущая корзина.

Заказу будет присвоен статус New.

  1. Для открытия платежного интерфейса в новом окне используйте ссылку: https://secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN, где ACCESS_TOKEN — полученный при создании заказа токен.
  2. Для тестирования процесса оплаты:
    1. Используйте URL: https://sandbox-secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN.
    2. Установите в запросе значение true для параметра sandbox.
    3. Используйте список банковских карт для тестирования.

ПРИМЕР

Copy
Full screen
Small screen
var data = JSON.stringify({
  "currency": "USD",
  "locale": "en",
  "sandbox": false
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://store.xsolla.com/api/v2/project/44056/payment/cart/custom_id");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE  

{
  "order_id": 641,
  "token": "f4puMEFFDZcx9nv5HoNHIkPe9qghvBQo"
}

Get order

Реализуйте вызов метода Get order, чтобы определить, была ли покупка уже обработана. Возможны следующие статусы заказа:
  • New — заказ создан и еще не оплачен
  • Paid — заказ оплачен
  • Cancelled — заказ отменен
  • Done — заказ оплачен и товар добавлен в инвентарь
Примечание
Проверка статуса должна проводиться с определенной периодичностью, так как разовая проверка может произойти раньше, чем заказ перейдет в следующий статус.
ПРИМЕР
Copy
Full screen
Small screen
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/order/656");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE

{
  "content": {
    "is_free": false,
    "items": [
      {
        "is_free": false,
        "price": {
          "amount": "0.9950",
          "amount_without_discount": "1.9900",
          "currency": "USD"
        },
        "quantity": 123,
        "sku": "gun_1"
      }
    ],
    "price": {
      "amount": "122.3850",
      "amount_without_discount": "122.3850",
      "currency": "USD"
    }
  },
  "order_id": 656,
  "status": "new"
}
Была ли статья полезна?
Спасибо!
Что может сделать страницу еще лучше? Сообщение
Жаль, что так произошло
Расскажите, почему статья не была полезна. Сообщение
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.
Последнее обновление: 3 октября 2024

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

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