跟踪订单状态

注意
通过本SDK,您可以在应用程序的客户端侧跟踪订单状态。但是,我们建议您设置支付Webhook处理程序在应用程序后端接收订单信息。这样您可以实现对完成的购买的额外验证。

用户购买后,您的应用程序可执行以下操作:

  • 在应用程序UI中显示订单状态
  • 成功支付后划走相应用户余额
  • 成功支付后发放购买的商品

使用本SDK实现前述操作的逻辑时,可通过以下方式跟踪订单状态:

注意

如果您的应用程序同时使用了Store和Payments库,建议使用Store库方法来跟踪订单。

如只使用Payments库,请使用Payments库方法来订阅订单状态更改。请将使用该方法来请求订单状态当做检索数据的辅助方法,以避免艾克索拉系统过载。

订阅订单状态更改

使用Store库方法

要订阅订单状态更改,请使用Store库中的getOrderStatus SDK方法并向该方法传入以下参数:

  • listenerOrderStatusListener类型的监听器对象。
  • orderId — 以参数形式从通过购物车购买、一键购买或用虚拟货币进行购买收到的订单ID。
SDK参考文档
了解SDK方法及其参数的详细信息。

调用XStore.getOrderStatus方法的示例:

Copy
Full screen
Small screen
XStore.getOrderStatus(object : OrderStatusListener() {

               override fun  onStatusUpdate(status: OrderResponse.Status) {

                   if(status == OrderResponse.Status.DONE) {

                       Log.d("MainActivity", "Success")

                   }

               }

               override fun  onFailure() {

                   Log.d("MainActivity", "Failure")

               }

           }, orderId)

建议打开支付UI时调用XStore.getOrderStatus方法。

购买方法封装了多个订单状态跟踪方法。跟踪根据以下算法执行:

  1. 建立一个Web socket连接。
  2. 如建立Web socket连接成功,且订单状态变为donecancel,则停止跟踪。如Web socket连接失败或响应包含不正确的数据,则使用短轮询跟踪订单状态。
  3. 通过短轮询继续跟踪订单状态。每3秒钟发送一次简单HTTP订单状态请求。如订单状态变为donecancel,则停止跟踪。

使用Payments库方法

要使用Payments库跟踪订单状态更改,请使用支付状态回调。具体方法是:
  1. 创建XPayments.IntentBuilder对象时,使用setStatusReceivedCallback方法传入StatusReceivedCallback回调。
  2. StatusReceivedCallback回调中实现onSuccess方法,每次发生唯一状态更改时调用。
注意

订单状态信息传入一个InvoicesDataResponse类型对象的onSuccess方法中。该对象包含一个InvoiceData对象数组。每个InvoiceData对象对应订单处理过程中的一个特定阶段并包含该阶段的状态。

例如,如果用户在下单时一开始输入了无效的数据,则包含一个InvoicesDataResponse.CANCELED状态的对象将显示在InvoiceData列表中。如用户改正了数据并成功支付了订单,则一个新的InvoiceData对象将显示在数组中并包含状态InvoicesDataResponse.Status.DONE

如收到了最终支付状态(InvoicesDataResponse.Status.DONEInvoicesDataResponse.Status.ERROR),状态跟踪将停止。

示例:

Copy
Full screen
Small screen
val intent = XPayments.createIntentBuilder(this)
               .accessToken(<accessToken>)
               .isSandbox(<isSandbox>)
           	.setStatusReceivedCallback(object : StatusReceivedCallback {
               	override fun onSuccess(data: InvoicesDataResponse) {
                   		Log.d(TAG, "StatusReceivedCallback is fired. Result data = $data")
               	}
           	})
           	.build()

请求订单状态

要请求支付的当前状态,请调用Store库的getOrder方法,并传入以下参数:

注意

订单状态信息传入一个InvoicesDataResponse类型对象的onSuccess方法中。该对象包含一个InvoiceData对象数组。每个InvoiceData对象对应订单处理过程中的一个特定阶段并包含该阶段的状态。

例如,如果用户在下单时一开始输入了无效的数据,则包含一个InvoicesDataResponse.CANCELED状态的对象将显示在InvoiceData列表中。如用户改正了数据并成功支付了订单,则一个新的InvoiceData对象将显示在数组中并包含状态InvoicesDataResponse.Status.DONE

如收到了最终支付状态(InvoicesDataResponse.Status.DONEInvoicesDataResponse.Status.ERROR),状态跟踪将停止。

示例:

Copy
Full screen
Small screen

XPayments.getStatus(<token>, <isSandbox>, object : GetStatusCallback {
            override fun onSuccess(data: InvoicesDataResponse?) {
                Log.d(TAG, "onSuccess is fired. Result data = $data")
            }

           override fun onError(throwable: Throwable?, errorMessage: String?) {
                Log.d(TAG, "onError is fired. ErrorMessage = $errorMessage")
            }

})
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。

有用链接

上次更新时间: 2024年9月5日

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

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