Digital Distribution Hub

О решении

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

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

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

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

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

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

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

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

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

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

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

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

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

Как подключить Digital Distribution Hub

Чтобы продвигать вашу игру с помощью каналов дистрибуции:
  1. Подключите продукт Магазин в Личном кабинете и загрузите:
  2. Настройте вебхуки.
  3. Обратитесь к вашему персональному менеджеру или напишите на csm@xsolla.com, чтобы активировать Digital Distribution Hub для выбранного вами проекта.
Примечание
Если вы еще не являетесь партнером Xsolla, но заинтересованы в сотрудничестве и подключении Digital Distribution Hub, напишите на business@xsolla.com.

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

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

Для настройки вебхуков:

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

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

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

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

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

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

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

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

В ответе вы можете передать дополнительные параметры транзакции в объекте custom_parameters.

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 транзакции на стороне Xsolla или хотите передать дополнительные параметры пользователя, реализуйте обработку следующего вебхука:
    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"
              }
            }
          },
          "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": "public_email@test.com"
        },
        "items": [
          {
            "item_id": 101,
            "sku": "mithril_dagger",
            "quantity": 2,
            "type": "virtual_good"
          }
        ]
      }
      

      В ответе вы можете передать дополнительные параметры транзакции в объекте custom_parameters.

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

      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
           },
          "custom_parameters": {
             "type": "object",
             "additionalProperties": true,
             "minProperties": 1,
             "maxProperties": 200
           }
         }
        }
        

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

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

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

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

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

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

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

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

        В процессе интеграции вам потребуется отправлять уведомления об успешной оплате или отмене платежа (шаг 9). Для корректной обработки уведомлений на стороне Xsolla сообщите вашему менеджеру IP-адрес сервера, с которого вы отправляете уведомления. Если IP-адрес меняется, необходимо своевременно уведомить об этом менеджера.

        Примечание
        Для партнеров-дистрибьюторов не требуется создавать аккаунт в Личном кабинете для работы с Digital Distribution Hub API. Создание аккаунта в Личном кабинете необходимо для разработчиков игр для работы с методами API для продажи игровых ключей и внутриигровых товаров.
        Чтобы распространять игры и внутриигровые товары в вашем приложении или сервисе, реализуйте следующую логику их покупки:
        1. Отобразите форму для ввода:
          • email-адреса пользователя — при продаже игр;
          • email-адреса и ID пользователя в игре — при продаже внутриигровых товаров.
        Примечание
        Поле ввода email-адреса должно быть обязательным при продаже игр и при продаже внутриигровых товаров. На указанный email-адрес Xsolla отправляет пользователю чек с информацией о платеже.

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

        1. Пример:

        1. Передайте полученные данные пользователя:
          • Email-адрес пользователя. Обязателен всегда.
          • ID пользователя в игре. Обязателен при продаже внутриигровых товаров.

        1. Данные используются для проверки существования этого пользователя в игре и получения авторизационного токена.

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

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

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

        1. В запросе передайте токен, полученный шаге 2, и следующий параметр:
        ПараметрТипОписание
        project_id
        integerID проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.

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

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

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

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

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

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

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

        1. В запросах методов наполнения и обновления корзины передайте следующие параметры:
        ПараметрТипОписание
        project_id
        integerID проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        items.sku
        stringУникальный артикул товара, который указывает разработчик игр в Личном кабинете.
        items.quantity
        integerКоличество предметов.
        items.type
        stringТип товара. Может принимать значения virtual_good, virtual_currency, physical_good, unit. Тип unit используется для игр.
        items.unit_items
        arrayМассив с данными об игре.
        items.unit_items.type
        stringТип товара для пакета игровых ключей. Может принимать значение game_key.
        items.unit_items.sku
        stringУникальный артикул пакета игровых ключей, который указывает разработчик игр в Личном кабинете. Для игры на конкретной платформе используется значение в формате sku_drm. Пример для игры с артикулом 110101 на steam: “sku”: “110101_steam”.

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

        1. Для создания заказа и покупки корзины используйте метод Создание заказа со всеми предметами из текущей корзины. В запросе передайте следующие параметры:
        ПараметрТипОписание
        project_id
        integerID проекта, в который загружены игровые ключи или бандлы с игровыми ключами, внутриигровые товары или бандлы с товарами.
        geotype
        numberID партнера-дистрибьютора на стороне Xsolla.
        currency
        stringВалюта платежа. Используется трехбуквенное обозначение валюты согласно стандарту ISO 4217.
        1. В ответе вернется ID заказа и стоимость корзины с учетом налогов.
        Примечание
        Вы можете использовать метод Создание заказа с указанным предметом, который позволяет создать заказ без создания корзины. В этом случае пользователь может купить только один тип товара.

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

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

        В другой раз

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

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