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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Реализуйте вызов метода 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"

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

Используйте метод Get the current user’s subscriptions в инвентаре пользователя для предоставления пользователю доступа к дополнительным возможностям.

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

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

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

  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
}

Note
Для быстрой покупки товара без создания корзины используйте метод 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 — заказ оплачен и товар добавлен в инвентарь

Note
Проверка статуса должна проводиться с определенной периодичностью, так как разовая проверка может произойти раньше, чем заказ перейдет в следующий статус.

ПРИМЕР

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"
}

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

Начисление

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

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

Списание

Сервер игры может отозвать предмет у игрока с помощью метода списания. При списании происходит полное удаление предмета из инвентаря игрока.

Была ли статья полезна?
Спасибо!
Что может сделать страницу еще лучше? Сообщение
Жаль, что так произошло
Расскажите, почему статья не была полезна. Сообщение
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.
Оценить страницу
Оценить страницу
Что может сделать страницу еще лучше?

В другой раз

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

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

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