获取订单状态

获取订单状态

您可以使用以下方法获取用户订单状态:

  1. 在服务器侧通过Webhook
  2. 在客户端侧通过WebSocket API或Shop Builder API

在服务器侧通过Webhook获取用户订单状态

在服务器侧配置Webhook后,可使用它们来获取订单详情和状态。

在客户端侧通过WebSocket API或Shop Builder API获取用户订单状态

如没有服务器或您是在客户端侧实现购买处理逻辑,可使用以下方式:
  1. WebSocket API
  2. Short-polling

使用WebSocket API在客户端侧获取订单状态

本解决方案使用websocket在不获取订单详细信息的情况下获取订单状态。该方法适用于:客户端(如您的网站或移动应用)和艾克索拉服务器间只创建了一个连接,因此客户端或服务器上都没有额外负载。

注:
如果您自己没有服务器来处理Webhook,或者您使用客户端侧购买处理逻辑,可通过Centrifuge SDK来使用WebSocket API。

完成以下步骤:

  1. 创建连接,以便艾克索拉服务器和您的客户端识别订单状态消息:

Copy
Full screen
Small screen
 1const client = new Centrifuge(
 2connectionURL,
 3{
 4data: {
 5  user_external_id: user_external_id,
 6  auth: auth,
 7  project_id: project_id
 8}
 9}
10)
11connectionURL - wss://ws-store.xsolla.com/connection/websocket
12auth - user JWT token
  1. 使用client.on函数来订阅事件,以便接收关于订单状态的新消息:
Copy
Full screen
Small screen
1client.on('publication', (ctx) => {
2   //handle the status
3});
  1. 触发建立实际连接:
Copy
Full screen
Small screen
1client.connect()
  1. 连接API历史记录方法,以便接收订单状态更改历史记录。
Copy
Full screen
Small screen
 1client.on('subscribed', function (ctx) {
 2   client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
 3resp.publications.forEach((ctx) => {
 4   /handle the status
 5});
 6
 7   }, function (err) {
 8       //handle the status
 9   });
10});

消息正文示例

Copy
Full screen
Small screen
1{
2order_id: 59614241,
3status: 'new'
4}

可能出现以下订单状态:

  • New — 已创建订单但未支付
  • Paid — 订单已支付
  • Done — 订单已交付(已发送所有支付凭证,交付在艾克索拉侧、外部平台等进行)
  • Canceled — 订单已取消,付款已退给用户

Websocket使用建议:

  • 通过websocket接收响应的最大等待时间为5分钟。
  • 应在打开支付界面时建立连接。
  • 一旦收到最终订单状态,无论是CanceledDone,都应中止连接。
  • 如果websocket的生命周期到期或连接出现任何问题,请使用短轮询。

短轮询

要在状态切换后获取订单中商品的详细信息,请调用获取订单API。

注:
将使用周期性订单状态轮询,即一个接收订单状态和订单信息的简单HTTP请求。建议的请求间隔时间为3秒。
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
上次更新时间: 2025年7月18日

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

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!
无法发送您的反馈
请稍后重试或发送邮件至doc_feedback@xsolla.com与我们联系。