Настройка продажи игровых ключей
Buy Button позволяет монетизировать игры через сайт самой игры, продавая за реальную или виртуальную валюту игровые ключи.
Продажа игровых ключей возможна по прямой ссылке, через интерфейс магазина или через виджет.
Товар | Способ продажи |
---|---|
Одна копия игры (игровой ключ). | Прямая ссылка, виджет или интерфейс магазина. При продаже через интерфейс магазина используйте метод быстрой покупки без создания корзины. |
Несколько копий игры (игровых ключей) или разные игры в составе корзины. | Интерфейс магазина. Используйте Site Builder или интегрируйте In-Game Store API. |
Вы можете продавать игровые ключи неавторизованным и авторизованным пользователям.
Использование авторизации позволяет:
- задавать ограничение на продажу игровых ключей для пользователя;
- использовать персонализацию каталога товаров и акционных предложений;
- использовать систему владения играми;
- сохранять данные пользователей в платежном интерфейсе Xsolla.
Вы можете авторизовывать пользователей с помощью продукта Login или вашей собственной системы авторизации. Подробная информация о настройке приведена в инструкции.
Продажа через прямую ссылку
Для открытия платежного интерфейса используется ссылка:
- curl
https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}
Покупка игровых ключей по прямой ссылке за реальную валюту возможна после подписания лицензионного договора с Xsolla. Для этого в Личном кабинете перейдите в раздел Договоры и налоги > Договоры, заполните договор и дождитесь подтверждения согласования. Согласование может занять до 3 рабочих дней.
Для тестирования оплаты используйте тестовое окружение, добавив в ссылку параметр mode=sandbox
.
Добавьте в ссылку следующие данные:
YOUR-ITEM-TYPE
— тип товара:game
— игра;game_key
— игра на конкретной платформе.bundle
— бандл.
YOUR-PROJECT-ID
— ID проекта из раздела Настройки проекта > Общие настройки > ID проекта в Личном кабинете.YOUR-ITEM-SKU
— артикул пакета игровых ключей. Для продажи игры на конкретной платформе необходимо получить артикул с помощью запроса Get games list (как правило, этот артикул выглядит какunit_name_drm_sku
).
- Внешний вид платежного интерфейса: тема (темная — dark или светлая — default), размер и другие параметры. Укажите в URL ссылки параметр
ui_settings
и в качестве значения передайте JSON-объектsettings.ui
в кодировке Base64. Пример URL с настройками UI:
- curl
https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
- Токен для передачи информации о пользователе. Используется только при продаже игровых ключей для авторизованных пользователей. Формируется в зависимости от типа аутентификации. Пример URL с токеном:
- curl
https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
- Параметр
mode=sandbox
для тестирования оплаты. Вы можете использовать тестовые банковские карты для проведения платежей.
- Пример URL-адреса для тестирования:
- curl
https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&mode=sandbox
Продажа через интерфейс магазина
Вы можете продавать игровые ключи через интерфейс магазина. Для создания магазина вы можете:
- использовать Site Builder;
- создать свою версию магазина и интегрировать In-Game Store API.
Для продажи пакетов игровых ключей, используя In-Game Store API:
- Для отображения каталога используйте метод Get games list.
Реализуйте покупку игровых ключей:
- Для быстрой покупки одного ключа используйте метод Create order with specified item. В ответе на данный метод вы получите токен, который необходимо использовать для открытия платежного интерфейса.
- Для покупки нескольких игровых ключей используйте методы работы с корзиной:
- Update cart item from current cart для добавления игрового ключа в корзину.
- Get current user’s cart для получения списка игровых ключей в корзине.
- Create order with all items from current cart для оплаты игровых ключей в корзине. В ответе на данный метод вы получите токен, который необходимо использовать для открытия платежного интерфейса.
items.unit_items.sku
из запроса на получение списка игр.Продажа через виджет
Вы можете добавить виджет для продажи игровых ключей на свою страницу и кастомизировать его. Чтобы скопировать код виджета перейдите в раздел Кастомизация виджета после создания пакета ключей в Личном кабинете.
Если игра продается на одной платформе, в виджете будет указана цена игры на этой платформе.
Пример: Купить сейчас за $10.
Если игра продается на нескольких платформах, в виджете будет указана наименьшая из цен среди платформ.
Пример: Купить от $10.
В окне оформления заказа пользователь сможет увидеть цены на всех платформах и сделать выбор.
Вы также можете отобразить в виджете цену на конкретной платформе, указав название платформы в параметре drm.
Пример кода виджета:
<div id="xsolla-buy-button-widget"></div>
<script>
var options = {
project_id: "101010",
sku: "my_key",
user: {
auth: "9qs9VyCIQQXBlzJQcfETIKWZDvhi4Sz1"
},
drm: "steam",
item_type: "unit",
api_settings: {
sandbox: true,
},
widget_ui: {
target_element: "#xsolla-buy-button-widget",
theme: {
foreground: "green",
background: "light"
},
},
payment_widget_ui: {
lightbox: {
height: '700px',
spinner: 'round'
}
}
};
var s = document.createElement('script');
s.type = "text/javascript";
s.async = true;
s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.8/widget.min.js";
s.addEventListener('load', function (e) {
var widgetInstance = XBuyButtonWidget.create(options);
}, false);
var head = document.getElementsByTagName('head')[0];
head.appendChild(s);
</script>
<style>
#xsolla-buy-button-widget {
/* place code for button positioning here */
margin: 10px
}
/* Styles the button itself */
.x-buy-button-widget.x-buy-button-widget__tiny
.x-buy-button-widget-payment-button {
background-color: #ff005b;
color: black;
}
</style>
Параметры виджета
Параметр | Тип | Описание |
---|---|---|
project_id | integer | ID проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами. |
item_type | string | Тип предмета. Может принимать значения virtual_good , virtual_currency , game_key , unit . Тип unit используется, когда есть несколько платформ распространения игры. |
sku | string | Уникальный ID предмета. |
drm | string | Артикул платформы распространения игры, например, steam . Позволяет отобразить цену на конкретной платформе. |
api_settings | object | Настройки для выбора окружения и хоста:
|
user | object | Объект с информацией о пользователе. |
user.auth | string | Авторизационный токен пользователя: JSON Web Token или Pay Station access token. |
user.locale | string | Локаль пользователя. Определяет язык текста кнопки покупки и платежного интерфейса. Используется двубуквенный код языка по ISO_639-1. |
widget_ui.theme | object | Цветовая тема виджета, определяющая его внешний вид. Может принимать значения {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]} . |
widget_ui.template | string | Шаблон. Возможные значения:
|
widget_ui.target_element | string | Элемент страницы, на котором должен отображаться виджет (должен использоваться селектор jQuery, например, #widget-example ). Обязательный. |
Параметры, определяющие внешний вид интерфейса оплаты
Параметр | Тип | Описание |
---|---|---|
payment_ui | object | Параметры внешнего вида платежного интерфейса. |
payment_widget_ui | object | Объект с параметрами, которые определяют внешний вид платежного интерфейса. |
payment_widget_ui.lightbox | object | Объект с опциями модального окна, в котором открывается платежный интерфейс. |
payment_widget_ui.lightbox.width | string | Ширина lightbox. Значение по умолчанию null . Если установлено значение null , ширина lightbox соответствует ширине платежного интерфейса. |
payment_widget_ui.lightbox.height | string | Высота lightbox. Значение по умолчанию 100% . Если установлено значение null , высота lightbox соответствует высоте платежного интерфейса. |
payment_widget_ui.lightbox.zIndex | integer | Свойство, отвечающее за положение объекта, по умолчанию 1000 . |
payment_widget_ui.lightbox.overlayOpacity | integer | Непрозрачность подложки виджета (0 — полностью прозрачная, 1 — полностью непрозрачная). Значение по умолчанию — 60% (.6 ). |
payment_widget_ui.lightbox.overlayBackground | string | Фон для верхнего слоя, по умолчанию #000000 . |
payment_widget_ui.lightbox.contentBackground | string | Фон фрейма, по умолчанию #ffffff . Обратите внимание, что настройка влияет только на фон фрейма lightbox и не меняет фон окна платежного интерфейса. |
payment_widget_ui.lightbox.spinner | string | Тип прелоадера, может принимать значение xsolla или round , по умолчанию xsolla . |
payment_widget_ui.lightbox.spinnerColor | string | Цвет прелоадера. |
payment_widget_ui.childWindow | object | Настройки дочернего окна, в котором открывается платежный интерфейс. Работает для мобильной версии. |
payment_widget_ui.childWindow.target | string | Свойство, определяющее, где должно быть открыто дочернее окно. Может принимать значения _blank , _self , _parent . Значение по умолчанию — _blank . |
Методы виджета
var widgetInstance = XBuyButtonWidget.create(options)
— создает экземпляр виджета и отображает его на странице.widgetInstance.on(event, handler)
— привязывает функцию обработчика событий к виджету.event (string)
— тип события.handler (function)
— функция, которая будет выполняться при срабатывании события.
widgetInstance.off(event, handler)
— удаляет обработчик событий.event (string)
— тип события.handler (function)
— функция обработчика, ранее привязанная к событию.
Список событий:
Параметр | Описание |
---|---|
init | Инициализация виджета. |
open | Открытие виджета. |
load | Событие после загрузки платежного интерфейса. |
close | Событие после закрытия платежного интерфейса. |
status | Событие, когда пользователь попадает на страницу статуса. |
status-invoice | Событие, когда пользователь попадает на страницу статуса, но платеж еще не завершен. |
status-delivering | Событие, когда пользователь попадает на страницу статуса, платеж завершен, мы прислали оповещение о платеже. |
status-done | Событие, когда пользователь попадает на страницу статуса, платеж успешно зачислен. |
status-troubled | Событие, когда пользователь попадает на страницу статуса, но платеж не прошел. |
Вы можете получить доступ к списку событий, используя объект XBuyButtonWidget.eventTypes
.
Кастомизация кнопки
- Откройте проект в Личном кабинете.
- В боковом меню нажмите Store.
- В панели Игровые ключи нажмите Настроить.
- Выберите нужный вам игровой ключ и перейдите на вкладку Кастомизация виджета.
- В блоке Кастомизировать выберите цвет фона.
theme
свойство background
с пустым значением.- Код при добавлении на страницу наследует стили. Чтобы их переопределить, добавьте стили, приведенные ниже.
style
под тегом script
, который вы получили на вкладке Кастомизация виджета для приоритета стилей виджета.- css
/* This should be used for button positioning but note this technically repositions the entire widget */
#xsolla-buy-button-widget {
/* place code for button positioning here */
}
/* Styles the button itself */
.x-buy-button-widget.x-buy-button-widget__tiny
.x-buy-button-widget-payment-button {
background-color: #ff005b;
color: black;
}
/* Button on hover */
.x-buy-button-widget.x-buy-button-widget__tiny
.x-buy-button-widget-payment-button:hover {
background-color: #ff005b;
}
/* The following are style overrides to leave you with just the button */
/* space immediately surrounding button */
.x-buy-button-widget-button-block.x-buy-button-widget-button-block__light {
background-color: white;
}
/* space above button (including game title area) */
.x-buy-button-widget.x-buy-button-widget__tiny
.x-buy-button-widget-game-logo {
height: 200px;
background-image: none !important;
background-color: white;
}
/* Game title (located right above button) */
.x-buy-button-widget-game-name.x-buy-button-widget-game-name__light {
display: none !important;
}
- Важно вставить скопированный код виджета, поскольку приведенные выше имена ID или классов и сам фрагмент кода используются вместе с ним (шаг 5).
- Вы также можете скопировать приведенный выше код, но, возможно, его придется адаптировать под ваши потребности. Комментарии к коду (строки 1, 3, 5, 11, 16, 18, 22, 29) помогут определить зависимости для каждого CSS-правила и для будущих стилей. Например, если вы хотите, чтобы у вас осталась только кнопка (а не весь виджет), вам нужно заменить фоновый цвет вашей страницы в местах, где цвет задан как
white
— в строках 20 и 27.
Как создать несколько кнопок или артикулов
Используйте Xsolla Pay2Play Widget Simple Integration 4 buttons, чтобы получить примеры кода для создания нескольких кнопок.
Структура этого кода аналогична коду виджета Buy Button. Пример миграции:
- javascript
<div id="xsolla-buy-button-widget"></div>
<div id="xsolla-buy-button-widget-2"></div>
<script>
var options = {
project_id: "191204",
sku: "789",
item_type: "unit",
api_settings: {
sandbox: false,
},
widget_ui: {
target_element: "#xsolla-buy-button-widget",
theme: {
foreground: "gold",
background: "",
},
},
payment_widget_ui: {
lightbox: {
height: "700px",
spinner: "round",
},
},
};
// options for second buy button - note the different SKU and target_element
var options2 = {
project_id: "191204",
sku: "123",
item_type: "unit",
api_settings: {
sandbox: false,
},
widget_ui: {
target_element: "#xsolla-buy-button-widget-2",
theme: {
foreground: "gold",
background: "",
},
},
payment_widget_ui: {
lightbox: {
height: "700px",
spinner: "round",
},
},
};
var s = document.createElement("script");
s.type = "text/javascript";
s.async = true;
s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.4/widget.min.js";
// one event listener per widget instance. repeat for more buttons, passing in different SKUs
s.addEventListener(
"load",
function (e) {
var widgetInstance = XBuyButtonWidget.create(options);
},
false
);
s.addEventListener(
"load",
function (e) {
var widgetInstance2 = XBuyButtonWidget.create(options2);
},
false
);
var head = document.getElementsByTagName("head")[0];
head.appendChild(s);
</script>
- Строки 1 и 2 содержат
div
для каждой кнопки. У каждого div есть свой уникальный ID. - Объект с именем
options2
содержит параметры для второй кнопки (начиная со строки 26). У вас будет набор таких объектовoptions
, аналогично приведенным выше, для каждой кнопки Купить. Обратите внимание на разныеsku
(строка 28) иtarget_element
(строка 34, указывающая наdiv
в строке 2).
Продолжить чтение
Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.