Как перейти на новые методы Commerce API

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

Вы можете подключить Commerce API, чтобы реализовать серверную часть вашего магазина, или перейти на новые методы Commerce API, если у вас уже реализована серверная интеграция с Иксоллой.

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

  • Авторизация через Xsolla Login или Pay Station Access Token
  • Управление виртуальными предметами
  • Управление инвентарем пользователя
  • Работа с корзиной и заказом

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

  • Для партнеров, которые разрабатывают интерфейс магазина и используют стороннее решение для реализации серверной части.
  • Для партнеров, которые уже реализовали серверную интеграцию с Иксоллой и хотят подключить Магазин с новыми методами Commerce API.

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

Чтобы подключить Commerce API к вашему приложению:

  1. Настройте модуль Виртуальные товары в Личном кабинете.
  2. Настройте аутентификацию.
  3. Реализуйте методы для работы с магазином.

В процессе интеграции понадобится ID проекта. Параметр отображается в Личном кабинете в разделе Настройки проекта > Оповещения. ID проекта используется в запросах Commerce API.

Настройка аутентификации

Возможны следующие варианты аутентификации пользователей:

  • Через Xsolla Login. Выберите этот вариант, если у вас не реализована серверная интеграция с Иксоллой.
  • Через Pay Station Access Token. Выберите этот вариант, если у вас реализована серверная интеграция с Иксоллой.

Аутентификация через Xsolla Login

  1. Настройте проект в Личном кабинете, следуя инструкции.
  2. Реализуйте вызов методов авторизации с помощью JSON Web Token или по протоколу OAuth 2.0.

Если данные пользователей хранятся на стороне Иксоллы, реализуйте методы:

Если данные пользователей хранятся на стороне PlayFab, используйте рецепт для хранилища PlayFab.

Если данные пользователей хранятся на вашей стороне, используйте рецепт для собственного хранилища.

Аутентификация через Pay Station Access Token

Алгоритм аутентификации:

  1. Ваш клиент отправляет запрос на аутентификацию на ваш сервер.
  2. Ваш сервер передает Merchant ID и API key на сервер Иксоллы и запрашивает access_token.
  3. Сервер Иксоллы передает access_token на ваш сервер.
  4. Ваш сервер передает access_token вашему клиенту.

Возвращенный access_token используется как авторизационный токен для аутентификации в Commerce API и построения интерфейса магазина.

Методы для работы с магазином

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

Get virtual items list

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

  1. Реализуйте вызов метода Get item groups list, чтобы отобразить полный список групп виртуальных товаров, добавленных в ваш магазин.
  2. Для каждого sku товара, возвращенного в методе Get virtual items list, укажите external_id группы, которой он принадлежит. Настройте sku and external_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/items/groups");

xhr.send(data);

//RESPONSE

  "groups": [
    {
      "children": [],
      "description": "all",
      "external_id": "all",
      "id": 10,
      "image_url": "http://none",
      "level": 0,
      "name": "all",
      "order": null,
      "parent_external_id": null
    }

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

Get user’s inventory

Реализуйте вызов метода Get user’s inventory, чтобы получить список предметов, добавленных в инвентарь после оплаты покупки.

ПРИМЕР

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/user/inventory/items");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE

{
  "items": [
    {
      "description": "Conquer your foes with vindication using the Basic Blaster! ",
      "image_url": "https://cdn.xsolla.net/img/misc/images/0c59a7698d4f66c1008b27ee752089b7.png",
      "instance_id": null,
      "long_description": "Conquer your foes with vindication using the Basic Blaster! Conquer your foes with vindication using the Basic Blaster! ",
      "name": "Xsolla Basic Blaster 1",
      "quantity": 22,
      "sku": "gun_1",
      "type": "virtual_good"
    },
    {
      "description": "Protect your noggin' with style",
      "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
      "instance_id": null,
      "long_description": "merchant_virtual_items_virtual_item_long_description_159429",
      "name": "Xsolla Helmet",
      "quantity": 18,
      "sku": "helmet_1",
      "type": "virtual_good"
    }
  ]
}

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