在游戏中集成商店
在发布商帐户中创建并配置商品(虚拟物品、虚拟货币、捆绑包、密钥)后,在您的游戏中添加一个游戏内商店:
显示商品目录
通过In-Game Store API调用实现商品目录的显示:
任务 | API |
---|---|
显示添加至商店的虚拟物品完整列表 | Get virtual items list |
在客户端侧显示可供购买的虚拟物品组列表 | Get item groups list |
在客户端侧获取商店中可供销售的虚拟货币列表 | Get virtual currency list |
在客户端侧显示添加至商店的虚拟货币套餐完整列表 | Get virtual currency package list |
显示添加至商店的捆绑包完整列表 | Get list of bundles |
销售商品
您可以通过以下方式销售商品:
快速购买
- 调用Create order with specified item API。响应中将传入用于打开支付UI的令牌。
- 用收到的支付令牌打开支付UI。
购物车下单
实现以下逻辑:- 设置购物车并获取令牌:
- 在客户端上实现 — 如要自行在应用程序中实现购物车。
- 在服务器上实现 — 如要使用艾克索拉解决方案(In-Game Store API调用)来管理购物车。
- 打开支付UI。
在客户端上设置购物车和购物车下单
自行实现添加和删除商品的逻辑。另外还需要考虑一个情况,即在调用设置购物车的API之前,您没有订单会应用哪些促销活动的信息,也就是说,总价和添加的奖励品的详情不可知。
- 玩家添加商品到购物车后,请调用Fill cart with items API。所选商品的当前信息(折扣前后的价格、奖励品)将传入响应中。
- 调用Create order with all items from current cart API。订单ID和支付令牌将传入响应中。创建的订单将获得New的订单状态。
- 打开支付UI。
在服务器上设置购物车和购物车下单
此方式下设置购物车的时间可能较长,因为每个购物车更改必须伴随API调用。
完成以下步骤:
- 更改购物车:
- 要添加商品或更改商品数量,请调用Update cart item by card ID API。
- 要删除商品,请调用Delete cart item by card ID API。
- 调用Create order with all items from the current cart API。订单ID和支付令牌将传入响应中。创建的订单将获得New的订单状态。
- 打开支付UI。
打开支付界面
要进行商品支付,请打开支付UI。用于打开支付UI的令牌将传入Create order with all items from current cart API响应中。
通过以下方式之一实现支付UI的打开:
- 在新窗口中打开。要在新浏览器窗口中打开支付UI,请使用此链接:
https://secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN
,其中ACCESS_TOKEN
是创建订单时收到的令牌。 - 通过小组件打开。请使用Xsolla PayStation Widget脚本(README文件中有说明信息)。
测试支付流程
您可以在沙盒模式下测试支付流程,可使用测试银行卡和任意帐户进行。
首次完成真实付款后,严格沙盒付款政策即生效。沙盒模式支付只对发布商帐户 > 公司设置 >中指定的用户可用。
只有与艾克索拉签署许可证协议后才能通过直接链接使用真实货币购买虚拟货币和物品。方法是在发布商帐户中前往协议与税务信息 > 协议部分,完成协议表单,然后等待确认。审核协议最多可能需要3个工作日。
sandbox
参数的值。默认禁用沙盒模式。获取订单状态
您可以使用以下方法获取用户订单状态:
在服务器侧通过Webhook获取用户订单状态
在服务器侧配置Webhook后,可使用它们来获取订单详情和状态。在客户端侧通过WebSocket API或IGS API获取用户订单状态
如没有服务器或您是在客户端侧实现购买处理逻辑,可使用以下方式:使用WebSocket API在客户端侧获取订单状态
本解决方案使用websocket在不获取订单详细信息的情况下获取订单状态。该方法适用于:客户端(如您的网站或移动应用)和艾克索拉服务器间只创建了一个连接,因此客户端或服务器上都没有额外负载。
完成以下步骤:
- 创建连接,以便艾克索拉服务器和您的客户端识别订单状态消息:
- javascript
const client = new Centrifuge(
connectionURL,
{
data: {
user_external_id: user_external_id,
auth: auth,
project_id: project_id
}
}
)
connectionURL - wss://ws-store.xsolla.com/connection/websocket
auth - user JWT token
- 使用
client.on
函数来订阅事件,以便接收关于订单状态的新消息:
- javascript
client.on('publication', (ctx) => {
//handle the status
});
- 触发建立实际连接:
- javascript
client.connect()
- 连接API历史记录方法,以便接收订单状态更改历史记录。
- javascript
client.on('subscribed', function (ctx) {
client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
resp.publications.forEach((ctx) => {
/handle the status
});
}, function (err) {
//handle the status
});
});
消息正文示例:
- javascript
{
order_id: 59614241,
status: 'new'
}
可能出现以下订单状态:
New
— 已创建订单但未支付Paid
— 订单已支付Done
— 订单已交付(已发送所有支付凭证,交付在艾克索拉侧、外部平台等进行)Canceled
— 订单已取消,付款已退给用户
通过Web socket响应所需的时间是5分钟。如超时或websocket存在问题,建议使用短轮询。
短轮询
要在状态切换后获取订单中商品的详细信息,请调用获取订单API。
发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。