Digital Distribution Hub

概览

Digital Distribution Hub是一个将游戏开发者与众多分发合作伙伴联结的解决方案,这些分发合作伙伴拥有进行游戏、虚拟物品和虚拟货币分发的自有平台或生态系统。

分发合作伙伴 — 可分发游戏和游戏内商品并具有自己的商店和账单系统的数字平台或生态系统。艾克索拉分发合作伙伴示例:

  • 聚合多项服务的超级应用
  • 银行应用程序
  • 电信及网络服务提供商
  • 自助终端机
  • 返利和奖励活动提供商
  • 电商市场

对于游戏开发者的好处:

  • 与高速增长的分发合作伙伴建立直接联系,从而扩大游戏的受众。
  • 让游戏进入具有特定用户基础的新分发渠道,从而增加营收。
  • 通过广告和横幅提升游戏在第三方平台上的自发发现流量。

对于分发合作伙伴的好处:

  • 通过提供更多游戏内容增加用户的忠诚度。用户可以直接在应用或服务中购买游戏密钥、虚拟物品、虚拟货币和捆绑包。
  • 通过快速流行的游戏行业留存老用户,吸引新用户。
  • 通过销售游戏行业市场中巨头的游戏密钥、虚拟物品和虚拟货币赚取佣金,从而提高营收。

运行机制

游戏密钥的用户购买流程

虚拟物品和虚拟货币的用户购买流程

交互过程

  1. 游戏开发者在发布商帐户中创建项目并上传游戏密钥、虚拟物品、虚拟货币和捆绑包。
  2. 分发合作伙伴请求用户数据:
    • 用户邮箱地址,以向其发送密钥;
    • 用户的游戏内ID,以向其添加商品。
  3. 用户在分发合作伙伴的界面中输入接收密钥的邮箱地址或接收商品的用户ID。
  4. 分发合作伙伴调用创建用户令牌并将邮箱地址或用户ID作为参数传入。
  5. 艾克索拉检查游戏中是否存在该用户(如游戏开发者启用了Webhook)。使用Webhook对于游戏密钥销售并非必需,但对于虚拟物品和虚拟货币的销售则必须使用。
  6. 艾克索拉创建一个包含用户数据的令牌,然后将该令牌发送给分发合作伙伴。
  7. 分发合作伙伴请求游戏目录或游戏内商品目录。
  8. 艾克索拉在响应中返回请求的目录。
  9. 分发合作伙伴接收目录并向用户显示。
  10. 用户进行游戏购买。分发合作伙伴创建一个购物车。
  11. 分发合作伙伴发送用户购物车以创建订单。
  12. 艾克索拉返回订单ID以及含折扣和税的购物车价格。
  13. 分发合作伙伴向用户显示购物车中的游戏总价。
  14. 如果用户前往支付,分发合作伙伴将相应金额入账并显示支付状态页面。
  15. 分发合作伙伴通知艾克索拉订单已支付并发送支付信息。
  16. 艾克索拉通知游戏开发者发生了该笔交易。
  17. 购买游戏的用户收到包含购买详情的邮件,并可以激活游戏密钥。如果用户购买的是虚拟物品或虚拟货币,则这些商品将添加到其物品库中。

游戏开发者侧的集成

如何连接Digital Distribution Hub

要通过分发渠道推广您的游戏:

  1. 发布商帐户中连接商店并下载:
  2. 设置Webhook
  3. 联系您的帐户经理或发送邮件至am@xsolla.com为您的项目激活Digital Distribution Hub。

Note
如果您还不是艾克索拉合作伙伴,但对于合作以及连接Digital Distribution Hub有兴趣,请发送邮件至business@xsolla.com

如何设置Webhook

要实现以下事项,设置Webhook为必需:

要启用Webhook:

  1. 发布商帐户中打开您的项目。
  2. 在侧边栏中单击项目设置,然后前往Webhooks
  3. Webhooks开关设置为
  4. 指定Webhook URL。
  5. 默认会生成一个用于项目Webhook签名的密钥。如要生成一个新密钥,请单击刷新图标。
  6. 单击保存设置

Note
对于虚拟物品和虚拟货币的分发,连接Webhook为必需。如没有Webhook,游戏内商品将无法添加到用户的物品库。

用户验证

艾克索拉发送一个用户验证Webhook来验证游戏中是否存在该用户。通过用户验证可以:

  • 向用户显示个性化的目录(如在响应中传入了用户属性);
  • 完成购买后将商品添加到用户的物品库。

为确认收到Webhook,您的服务器应返回:

  • 不带消息正文的HTTP代码204(如游戏中存在该用户);
  • 描述问题的HTTP代码400(如果指定用户未找到或传入的签名无效)。

关于Webhook机制的详细列表及示例,请参阅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关联,请实现以下Webhook的处理:

    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的Webhook参数列表:

        参数类型描述
        notification_type
        string通知类型。
        order_id
        integer订单ID。
        project_id
        integer加载游戏密钥或游戏密钥捆绑包、游戏内商品或游戏内商品捆绑包的项目的ID。
        user.external_id
        string游戏开发者侧的用户ID。
        items
        string用户所购物品的清单。
        items.sku
        array商品唯一ID。game_key类型的商品使用sku_drm格式的值。
        items.type
        array商品类型。可为以下值:virtual_goodvirtual_currencygame_keyphysical_good
        items.quantity
        integer商品数量。

        购买通知

        用户支付所购商品后,您将获得:

        分发合作伙伴侧的集成

        如有兴趣集成Digital Distribution Hub,请发送邮件至psbusiness@xsolla.com联系集成经理,获取与Digital Distribution Hub API交互所需的参数:

        Note
        分发合作伙伴无需创建发布商帐户即可使用Digital Distribution Hub API。但对游戏开发者而言,创建发布商帐户为必需,这样才能使用用于游戏密钥和游戏内商品销售的API方法

        要在您的应用或服务中分发游戏或游戏内商品,请实现以下游戏购买逻辑:

        1. 显示用于输入用户邮箱地址或用户游戏内ID的表单。
          邮箱地址用于销售游戏密钥和游戏密钥捆绑包的项目。该情形中,还需要在界面中实现让用户选择DRM的能力。
          用户ID用于销售虚拟物品、虚拟货币及虚拟物品和虚拟货币捆绑包的项目。该情形中,还需要显示让用户输入其在注册游戏时收到的用户ID的提示。例如:

        1. 传入收到的邮箱地址和用户ID以检查游戏中是否存在该用户并接收授权令牌。请使用创建用户令牌方法获取令牌。在请求中传入:

        参数类型描述
        project_id
        integer加载游戏密钥或游戏密钥捆绑包、游戏内商品或游戏内商品捆绑包的项目的ID。
        user.email
        string用户邮箱地址。
        user.id
        string or null游戏中的唯一用户标识符。

        1. 响应中将返回一个包含用户数据的授权令牌。

        1. 导入:

        1. 在请求中传入步骤2中收到的令牌和以下参数:

        参数类型描述
        project_id
        integer加载游戏密钥或游戏密钥捆绑包、游戏内商品或游戏内商品捆绑包的项目的ID。

        1. 在您的店面中显示游戏和游戏内商品目录。在界面中实现以下项的选择能力:
          • 游戏密钥的数量;
          • 游戏内商品的数量;
          • 虚拟货币的数量或含固定数量货币的虚拟货币套餐的数量;
          • 捆绑包的数量。

        1. 如使用购物车,则商品的数量可在用户购物车中指定。如不使用购物车,则可在目录中实现商品数量的选择。

        1. 在购物车中指定商品数量的示例:

        1. 在目录中指定商品数量的示例:

        1. 如不使用购物车,请前往步骤6并使用使用指定商品创建订单方法。

        1. 要将商品加入购物车,请使用在购物车里添加商品方法。

        1. 用户可以在一个订单中添加、删除商品或更改数量。您可以使用以下方法更新购物车:

        1. 此情况中,更新购物车后请使用获取当前用户的购物车

        1. 在购物车加购和更新购物车方法的请求中传入以下参数:

        参数类型描述
        project_id
        integer加载游戏密钥或游戏密钥捆绑包、游戏内商品或游戏内商品捆绑包的项目的ID。
        items.sku
        string商品唯一ID。game_key类型的商品使用sku_drm格式的值。
        items.quantity
        integer商品数量。

        1. 调用在购物车里添加商品获取当前用户的购物车后,响应中将返回所选产品的更新信息,如折扣前后的价格、奖励品等。

        1. 要创建购物车订单并支付,请调用使用当前购物车中的所有商品创建订单方法。在请求中传入以下参数:

        参数类型描述
        project_id
        integer加载游戏密钥或游戏密钥捆绑包、游戏内商品或游戏内商品捆绑包的项目的ID。
        geotype
        number艾克索拉侧的分发合作伙伴ID。
        currency
        string订单货币。虚拟货币使用SKU,真实货币使用三个字母的ISO 4217代码。

        1. 响应将返回订单ID和含税的购物车价格。

        Note
        您可以使用使用指定商品创建订单方法在不创建购物车的情况下创建订单。该情况下,用户只能购买一种类型的商品。

        1. 向用户显示购物车总价。
        2. 在您的平台中向用户扣款。向用户显示支付状态。
        3. 发送支付通知并在请求中传入以下参数:

        参数类型描述
        project_id
        integer加载游戏密钥或游戏密钥捆绑包、游戏内商品或游戏内商品捆绑包的项目的ID。
        payment.amount
        integer支付的金额。
        order_id
        integer订单ID。
        ps_transaction_id
        string分发合作伙伴侧的交易ID。
        本文对您的有帮助吗?
        谢谢!
        我们还有其他可改进之处吗? 留言
        非常抱歉
        请说明为何本文没有帮助到您。 留言
        感谢您的反馈!
        我们会查看您的留言并运用它改进用户体验。
        为此页面评分
        为此页面评分
        我们还有其他可改进之处吗?

        不想回答

        感谢您的反馈!
        上次更新时间: 2022年6月3日

        发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。