跟踪订单状态
用户购买后,您的应用程序可执行以下操作:
- 在应用程序UI中显示订单状态
- 成功支付后划走相应用户余额
- 成功支付后发放购买的商品
使用本SDK实现前述操作的逻辑时,可通过以下方式跟踪订单状态:
如果您的应用程序同时使用了Store和Payments库,建议使用Store库方法来跟踪订单。
如只使用Payments库,请使用Payments库方法来订阅订单状态更改。请将使用该方法来请求订单状态当做检索数据的辅助方法,以避免艾克索拉系统过载。
订阅订单状态更改
使用Store库方法
要订阅订单状态更改,请使用Store库中的getOrderStatus
SDK方法并向该方法传入以下参数:
listener
—OrderStatusListener
类型的监听器对象。orderId
— 以参数形式从通过购物车购买、一键购买或用虚拟货币进行购买收到的订单ID。
调用XStore.getOrderStatus方法的示例:
- kotlin
1XStore.getOrderStatus(object : OrderStatusListener() {
2
3 override fun onStatusUpdate(status: OrderResponse.Status) {
4
5 if(status == OrderResponse.Status.DONE) {
6
7 Log.d("MainActivity", "Success")
8
9 }
10
11 }
12
13 override fun onFailure() {
14
15 Log.d("MainActivity", "Failure")
16
17 }
18
19 }, orderId)
建议打开支付UI时调用XStore.getOrderStatus
方法。
购买方法封装了多个订单状态跟踪方法。跟踪根据以下算法执行:
- 建立一个Web socket连接。
- 如建立Web socket连接成功,且订单状态变为
done
或cancel
,则停止跟踪。如Web socket连接失败或响应包含不正确的数据,则使用短轮询跟踪订单状态。 - 通过短轮询继续跟踪订单状态。每3秒钟发送一次简单HTTP订单状态请求。如订单状态变为
done
或cancel
,则停止跟踪。
使用Payments库方法
要使用Payments库跟踪订单状态更改,请使用支付状态回调。具体方法是:- 创建
XPayments.IntentBuilder
对象时,使用setStatusReceivedCallback
方法传入StatusReceivedCallback
回调。 - 在
StatusReceivedCallback
回调中实现onSuccess
方法,每次发生唯一状态更改时调用。
订单状态信息传入一个InvoicesDataResponse
类型对象的onSuccess
方法中。该对象包含一个InvoiceData
对象数组。每个InvoiceData
对象对应订单处理过程中的一个特定阶段并包含该阶段的状态。
例如,如果用户在下单时一开始输入了无效的数据,则包含一个InvoicesDataResponse.CANCELED
状态的对象将显示在InvoiceData
列表中。如用户改正了数据并成功支付了订单,则一个新的InvoiceData
对象将显示在数组中并包含状态InvoicesDataResponse.Status.DONE
。
如收到了最终支付状态(InvoicesDataResponse.Status.DONE
或InvoicesDataResponse.Status.ERROR
),状态跟踪将停止。
示例:
- kotlin
1val intent = XPayments.createIntentBuilder(this)
2 .accessToken(<accessToken>)
3 .isSandbox(<isSandbox>)
4 .setStatusReceivedCallback(object : StatusReceivedCallback {
5 override fun onSuccess(data: InvoicesDataResponse) {
6 Log.d(TAG, "StatusReceivedCallback is fired. Result data = $data")
7 }
8 })
9 .build()
请求订单状态
要请求支付的当前状态,请调用Store库的getOrder
方法,并传入以下参数:
orderId
— 订单ID,从通过购物车购买、一键购买或用虚拟货币进行购买收到。callback
— 检索订单信息成功的回调。实现回调时,请使用GetStatusCallback
接口并实现onSuccess
和onError
方法。
订单状态信息传入一个InvoicesDataResponse
类型对象的onSuccess
方法中。该对象包含一个InvoiceData
对象数组。每个InvoiceData
对象对应订单处理过程中的一个特定阶段并包含该阶段的状态。
例如,如果用户在下单时一开始输入了无效的数据,则包含一个InvoicesDataResponse.CANCELED
状态的对象将显示在InvoiceData
列表中。如用户改正了数据并成功支付了订单,则一个新的InvoiceData
对象将显示在数组中并包含状态InvoicesDataResponse.Status.DONE
。
如收到了最终支付状态(InvoicesDataResponse.Status.DONE
或InvoicesDataResponse.Status.ERROR
),状态跟踪将停止。
示例:
- kotlin
1
2XPayments.getStatus(<token>, <isSandbox>, object : GetStatusCallback {
3 override fun onSuccess(data: InvoicesDataResponse?) {
4 Log.d(TAG, "onSuccess is fired. Result data = $data")
5 }
6
7 override fun onError(throwable: Throwable?, errorMessage: String?) {
8 Log.d(TAG, "onError is fired. ErrorMessage = $errorMessage")
9 }
10
11})
有用链接
上次更新时间: 2025年6月12日发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。