跟踪订单状态
用户购买后,您的应用程序可执行以下操作:
- 在应用程序UI中显示订单状态
- 成功支付后划走相应用户余额
- 成功支付后发放购买的商品
使用本SDK实现前述操作的逻辑时,可通过以下方式跟踪订单状态:
如果您的应用程序同时使用了Store和Payments库,建议使用Store库方法来跟踪订单。
如只使用Payments库,请使用Payments库方法来订阅订单状态更改。请将使用该方法来请求订单状态当做检索数据的辅助方法,以避免艾克索拉系统过载。
订阅订单状态更改
使用Store库方法
要订阅订单状态更改,请使用Store库中的getOrderStatus
SDK方法并向该方法传入以下参数:
listener
—OrderStatusListener
类型的监听器对象。orderId
— 以参数形式从通过购物车购买、一键购买或用虚拟货币进行购买收到的订单ID。
调用XStore.getOrderStatus方法的示例:
- kotlin
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
方法。
购买方法封装了多个订单状态跟踪方法。跟踪根据以下算法执行:
- 建立一个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
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
方法,并传入以下参数:
orderId
— 订单ID,从通过购物车购买、一键购买或用虚拟货币进行购买收到。callback
— 检索订单信息成功的回调。实现回调时,请使用GetStatusCallback
接口并实现onSuccess
和onError
方法。
订单状态信息传入一个InvoicesDataResponse
类型对象的onSuccess
方法中。该对象包含一个InvoiceData
对象数组。每个InvoiceData
对象对应订单处理过程中的一个特定阶段并包含该阶段的状态。
例如,如果用户在下单时一开始输入了无效的数据,则包含一个InvoicesDataResponse.CANCELED
状态的对象将显示在InvoiceData
列表中。如用户改正了数据并成功支付了订单,则一个新的InvoiceData
对象将显示在数组中并包含状态InvoicesDataResponse.Status.DONE
。
如收到了最终支付状态(InvoicesDataResponse.Status.DONE
或InvoicesDataResponse.Status.ERROR
),状态跟踪将停止。
示例:
- kotlin
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。