Онлайн-дистрибуция Иксолла

О продукте

Онлайн-дистрибуция Иксолла — это решение, которое связывает разработчиков игр с многочисленными партнерами-дистрибьюторами, предлагающими собственные платформы или экосистемы для распространения игр, внутриигровых предметов и виртуальной валюты.

Партнеры-дистрибьюторы — цифровые платформы или экосистемы, обладающие своей витриной и биллингом, через которые могут распространяться игры и внутриигровые товары. Примеры партнеров-дистрибьюторов Иксоллы:

  • суперприложения, которые объединяют множество сервисов;
  • банковские приложения;
  • телекоммуникационные и интернет-провайдеры;
  • платежные терминалы;
  • поставщики программ кешбэка и вознаграждений;
  • торговые площадки электронной коммерции.

Преимущества для разработчика игр:

  • Расширение аудитории игр за счет прямого подключения к быстрорастущим партнерам-дистрибьюторам.
  • Увеличение доходов за счет добавления игры в новые каналы дистрибуции с уникальной пользовательской базой.
  • Увеличение органического трафика за счет рекламы и баннеров на сторонних платформах.

Преимущества для партнера-дистрибьютора:

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

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

Сценарий пользователя при покупке игровых ключей

Сценарий пользователя при покупке внутриигровых предметов и виртуальной валюты

Сценарий взаимодействия

  1. Разработчик игр создает проект в Личном кабинете и загружает игровые ключи, внутриигровые предметы, виртуальную валюту, бандлы.
  2. Партнер-дистрибьютор запрашивает данные пользователя:
    • email-адрес пользователя, на который будут отправлены ключи;
    • ID пользователя в игре, которому будут добавлены предметы.
  3. Пользователь в интерфейсе партнера-дистрибьютора вводит email-адрес для получения ключей или ID пользователя для получения предметов.
  4. Партнер-дистрибьютор вызывает метод Создание токена пользователя и передает в параметрах email-адрес или ID пользователя.
  5. Иксолла проверяет существование пользователя в игре, если у разработчика игр включены вебхуки. Включение вебхуков для продажи игровых ключей опционально, для продажи внутриигровых предметов и виртуальной валюты обязательно.
  6. Иксолла создает токен с данными пользователя и отправляет токен партнеру-дистрибьютору.
  7. Партнер-дистрибьютор запрашивает каталог внутриигровых товаров.
  8. Иксолла возвращает в ответе запрашиваемый каталог внутриигровых товаров.
  9. Партнер-дистрибьютор получает каталог и отображает его пользователю.
  10. Пользователь совершает покупку. Партнер-дистрибьютор формирует корзину.
  11. Партнер-дистрибьютор отправляет корзину пользователя для оформления заказа.
  12. Иксолла возвращает идентификатор заказа и стоимость корзины с учетом скидок и налогов.
  13. Партнер-дистрибьютор отображает пользователю итоговую стоимость корзины.
  14. Если пользователь продолжает оплату, партнер-дистрибьютор списывает денежные средства пользователя и отображает страницу со статусом платежа.
  15. Партнер-дистрибьютор оповещает Иксоллу, что заказ оплачен, и передает информацию о платеже.
  16. Иксолла уведомляет разработчика игры о покупке.
  17. Пользователь, купивший игру, получает письмо с деталями покупки на указанный email-адрес и может активировать игровые ключи. Если пользователь купил внутриигровые предметы или виртуальную валюту, они будут добавлены в его инвентарь.

Интеграция на стороне разработчика игр

Как подключить Онлайн-дистрибуцию

Чтобы продвигать вашу игру с помощью каналов дистрибуции:

  1. Подключите продукт Магазин в Личном кабинете и загрузите:
  2. Настройте вебхуки.
  3. Обратитесь к вашему аккаунт-менеджеру или напишите на am@xsolla.com, чтобы активировать Онлайн-дистрибуцию для выбранного вами проекта.

Примечание
Если вы еще не являетесь партнером Иксоллы, но заинтересованы в сотрудничестве и подключении Онлайн-дистрибуции, напишите на business@xsolla.com.

Как настроить вебхуки

Настройка вебхуков необходима:

Для подключения вебхуков:

  1. Откройте ваш проект в Личном кабинете.
  2. Нажмите Настройки проекта в боковом меню и перейдите в раздел Вебхуки.
  3. Установите переключатель Вебхуки в положение Вкл.
  4. Укажите URL-адрес, на который вы хотите получать вебхуки.
  5. Секретный ключ проекта для подписи вебхуков генерируется по умолчанию. Если вы хотите изменить его, нажмите значок обновления.
  6. Нажмите Сохранить настройки.

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

Проверка существования пользователя

Иксолла отправляет вебхук Проверка существования пользователя, чтобы удостовериться, что данный пользователь существует в игре. Валидация пользователя позволяет:

  • отобразить персонализированный каталог товаров для пользователя, если в ответе вы передадите атрибуты пользователя;
  • добавить товары в инвентарь пользователя после покупки.

Чтобы подтвердить получение вебхука, ваш сервер должен вернуть:

  • 204 HTTP-код без тела сообщения в случае успешного ответа, если пользователь существует в игре;
  • 400 HTTP-код с описанием проблемы, если указанный пользователь не был найден или если передана недействительная подпись.

Полный список и механизм работы вебхуков с примерами обработки подробно описан в справочнике API.

Схема тела запроса:

Copy
Full screen
Small screen
    {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "user_attributes": {
        "type": "object",
        "required": false,
        "minProperties": 1,
        "maxProperties": 100,
        "patternProperties": {
          "^[\\w-_.]{1,255}$": {
            "oneOf": [
              {
                "type": "integer"
              },
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 255
                },
                "minItems": 1,
                "maxItems": 1000
              }
            ]
          }
        },
        "additionalProperties": false
      }
    }
    }

    Пример ответа:

    Copy
    Full screen
    Small screen
    {
      "user_attributes": {
        "age": 18,
        "level": 1,
        "game": "WoW",
        "is_baned": false,
        "registration_date": "2022-01-01"
      }
    }

    Связывание ID транзакций

    Если вы используете внешний ID (ID транзакции в вашей системе) и хотите связать его с ID транзакции на стороне Иксоллы, реализуйте обработку следующего вебхука:

    Copy
    Full screen
    Small screen
      {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "notification_type": {
            "type": "string"
          },
          "order_id": {
            "type": "integer"
          },
          "project_id": {
            "type": "integer"
          },
          "user": {
            "type": "object",
            "properties": {
              "external_id": {
                "type": "string"
              },
              "email": {
                "type": ["string", "null"]
              }
            }
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "item_id": {
                  "type": "integer"
                },
                "sku":  {
                  "type": "string"
                },
                "quantity": {
                  "type": "integer"
                },
                "type": {
                  "type": "string"
                }
              }
            }
          }
        }
      }

      Пример запроса:

      Copy
      Full screen
      Small screen
      {
        "notification_type": "create_external_transaction",
        "order_id": 1,
        "project_id": 51336,
        "user": {
          "external_id": "user_id",
          "email": null
        },
        "items": [
          {
            "item_id": 101,
            "sku": "mithril_dagger",
            "quantity": 2,
            "type": "virtual_good"
          }
        ]
      }

      Ожидаемый ответ:

      Copy
      Full screen
      Small screen
        {
          "id": "validation_transaction_info_response.json",
          "$schema": "http://json-schema.org/draft-07/schema#",
          "description": "DDH Project Transaction Info Response",
          "type": "object",
          "additionalProperties": true,
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            }
          },
          "required": [
            "id"
          ]
        }

        Пример ответа:

        Copy
        Full screen
        Small screen
        {
            "id":"123"
        }

        Список параметров вебхука для связывания ID транзакций:

        ПараметрТипОписание
        notification_type
        stringТип оповещения.
        order_id
        integerИдентификатор заказа.
        project_id
        integerИдентификатор проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        user.external_id
        stringИдентификатор пользователя на стороне разработчика игр.
        items
        stringСписок предметов, которые купил пользователь.
        items.sku
        arrayУникальный ID предмета. Для предметов с типом game_key используется значение в формате sku_drm.
        items.type
        arrayТип предмета. Может принимать значения virtual_good, virtual_currency, game_key, physical_good.
        items.quantity
        integerКоличество предметов.

        Оповещение о совершении покупки

        После того как пользователь оплачивает покупку, вы получаете:

        Интеграция на стороне партнера-дистрибьютора

        Если вы заинтересованы в интеграции Онлайн-дистрибуции, напишите на psbusiness@xsolla.com для связи с менеджером и получения обязательных параметров для работы с методами Digital Distribution Hub API:

        Примечание
        Для партнеров-дистрибьюторов не требуется создавать аккаунт в Личном кабинете для работы с Digital Distribution Hub API. Создание аккаунта в Личном кабинете необходимо для разработчиков игр для работы с методами API для продажи игровых ключей и внутриигровых товаров.

        Чтобы распространять игры и внутриигровые товары в вашем приложении или сервисе, реализуйте следующую логику их покупки:

        1. Отобразите форму для ввода email-адреса пользователя или ID пользователя в игре.
          Email-адрес используется для проектов, которые продают игровые ключи и бандлы с игровыми ключами. В этом случае также необходимо реализовать в интерфейсе возможность для выбора пользователем DRM.
          ID пользователя в игре используется для проектов, которые продают внутриигровые предметы, валюту и бандлы с предметами и валютой. В этом случае также необходимо отобразить подсказку для пользователя о необходимости ввода ID, который он получил при регистрации в игре. Например:

        1. Передайте полученные email-адрес или ID пользователя для проверки существования этого пользователя в игре и получения авторизационного токена. Используйте метод Создание токена пользователя. В запросе передайте параметры:

        ПараметрТипОписание
        project_id
        integerИдентификатор проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        user.email
        stringEmail-адрес пользователя.
        user.id
        string or nullУникальный идентификатор пользователя в игре.

        1. В ответе вернется авторизационный токен с данными пользователя.

        1. Импортируйте:

        1. В запросе передайте токен, полученный шаге 2, и следующий параметр:

        ПараметрТипОписание
        project_id
        integerИдентификатор проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.

        1. Отобразите каталог игр и товаров на своей витрине. В интерфейсе реализуйте возможность для выбора:
          • количества внутриигровых ключей;
          • количества внутриигровых предметов;
          • количества виртуальной валюты или пакетов виртуальной валюты с фиксированным количеством валюты;
          • количества бандлов.

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

        1. Пример для указания количества товаров в корзине:

        1. Пример для указания количества товаров в каталоге:

        1. Если вы не используете корзину, перейдите к шагу 6 и используйте метод Создание заказа с указанным предметом.

        1. Для наполнения корзины используйте метод Наполнение корзины предметами.

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

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

        1. В запросах методов наполнения и обновления корзины передайте следующие параметры:

        ПараметрТипОписание
        project_id
        integerИдентификатор проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        items.sku
        stringУникальный ID предмета. Для предметов с типом game_key используется значение в формате sku_drm.
        items.quantity
        integerКоличество предметов.

        1. После вызова метода Наполнение корзины предметами или метода Получение корзины текущего пользователя в ответе вернется текущая информация о выбранных товарах — цены до и после применения скидок, бонусные товары.

        1. Для создания заказа и покупки корзины используйте метод Создание заказа со всеми предметами из текущей корзины. В запросе передайте следующие параметры:

        ПараметрТипОписание
        project_id
        integerИдентификатор проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        geotype
        numberИдентификатор партнера-дистрибьютора на стороне Иксоллы.
        currency
        stringВалюта платежа. Используется трехбуквенное обозначение валюты согласно стандарту ISO 4217.

        1. В ответе вернется идентификатор заказа и стоимость корзины с учетом налогов.

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

        1. Отобразите пользователю итоговую стоимость корзины.
        2. Осуществите списание денежных средств пользователя внутри вашей платформы. Отобразите пользователю статус платежа.
        3. Отправьте уведомление об успешной оплате и в запросе передайте следующие параметры:

        ПараметрТипОписание
        project_id
        integerИдентификатор проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        payment.amount
        integerСумма платежа.
        order_id
        integerИдентификатор заказа.
        ps_transaction_id
        stringИдентификатор транзакции на стороне партнера-дистрибьютора.
        Примечание
        Если платеж не был выполнен или был оформлен возврат, отправьте уведомление об отмене платежа.
        Была ли статья полезна?
        Спасибо!
        Что может сделать страницу еще лучше? Сообщение
        Жаль, что так произошло
        Расскажите, почему статья не была полезна. Сообщение
        Спасибо за обратную связь!
        Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.
        Оценить страницу
        Оценить страницу
        Что может сделать страницу еще лучше?

        В другой раз

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

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