物品库。时效性商品

运行机制

时效性商品是一次性购买的付费奖励。因此到期之后用户需要重新购买。

主要功能:

  • 时效性商品可以不限次数销售。
  • 用户再次购买该商品时,物品库中的物品数量不变,但该商品到期时间相应延长。
  • 您可在发布商帐户中配置该商品的到期时间。

限制:

  • 只能在游戏的服务器侧管理时效性商品。

注:
如要限制商品在商店中的显示时间,请按照如何设置商品在商店中的显示时间限制说明进行操作。

适用对象

  • 集成了游戏内商店并希望设置“时效性商品”这一新物品类型的合作伙伴。
  • 希望销售Season PassBattle Pass或在一定期限内授予用户特权或额外内容(例如游戏内物品或任务)的其他物品。

如何获取

前提条件

如果尚未集成艾克索拉商店,请执行以下操作:

  1. 创建您的艾克索拉发布商帐户
  2. 前往项目,然后单击创建项目按钮。
  3. 添加项目名称,然后单击创建
  4. 商店连接至项目。
  5. 连接虚拟物品模块。

集成过程

  1. 创建物品组。
  2. 创建物品:
    1. 创建新物品时,在物品属性菜单中选择时效性商品
    2. 指定有效期

  1. 实现获取目录中的时效性商品
  2. 实现获取物品库中的时效性商品
  3. 实现购买时效性商品

获取目录中的时效性商品

实现Get virtual items list API方法以显示添加到商店的虚拟物品的完整列表。

示例

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 the current user’s subscriptions方法获取用户物品库中的订阅以授予其对额外功能的访问权限。

购买时效性商品

首次购买后,该时效性商品即被加入物品库。

第二次以及之后购买时:

  1. 如果该时效性商品处于激活状态,则在剩余时间的基础上再加上一个有效期的时间。
  2. 如果该时效性商品处于未激活状态,则为默认的该商品的到期时间。

实现以下方法购买时效性商品。

Get cart

对购买虚拟物品实现Get cart by IDGet current user’s cart的API方法。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
}
注:
如要支持快速购买(不创建购物车),请使用Create order with specified item API方法。

Create order with all items

  1. 实现以下API方法之一:
    1. Create order with all items from particular cart(如果通过ID获取购物车)。
    2. Create order with all items from current cart(如果获取当前购物车)。

创建的订单将为New订单状态。

  1. 如要在新窗口中打开支付UI,请使用下列链接: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. 将请求中的sandbox参数设置为true
    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 API方法来判断购买是否已处理。存在以下几种状态:
  • New — 订单已创建但未付款
  • Paid — 订单已付款
  • Cancelled — 订单已取消
  • Done — 订单已付款且物品已添加至物品库
注:
应以一定频率进行状态检查,因为一次性检查可能会错过订单的新状态。
示例
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"
}

服务器侧时效性商品管理

发放

游戏服务器可通过发放方法将该时效性商品发放给用户。

时效性商品到期时间的计算方法与购买时效性商品时使用的计算方法相同。

撤回

游戏服务器可通过撤回方法从用户处撤回商品。撤回商品意味着将其从用户物品库中完全删除。
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
为此页面评分
为此页面评分
我们还有其他可改进之处吗?

不想回答

感谢您的反馈!
上次更新时间: 2024年1月22日

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

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!