Hacer un seguimiento del estado del pedido
Después de que un usuario haga una compra, su aplicación puede realizar las siguientes acciones:
- mostrar el estado del pedido en la interfaz de usuario de la aplicación
- abonar el importe en el saldo de un usuario tras un pago aceptado
- conceder los artículos comprados tras un pago aceptado
Cuando utilice el SDK para implementar la lógica de estas acciones, puede hacer un seguimiento del estado del pedido de las siguientes maneras:
Si utiliza tanto la biblioteca de Store como la biblioteca de Payments en su aplicación, le recomendamos que utilice el método de la biblioteca de Store para realizar el seguimiento del pedido.
Si solo utiliza la biblioteca de Payments, suscríbase a los cambios de estado de los pedidos mediante el método de la biblioteca de Payments. Utilice el método para solicitar el estado del pedido solo como opción complementaria para recuperar datos y evitar sobrecargar los sistemas de Xsolla.
Suscribirse a los cambios de estado de los pedidos
Utilice el método de la biblioteca de Store
Para suscribirse a los cambios de estado del pedido, use el método del SDK getOrderStatus
de la biblioteca de Store y transmita los siguientes parámetros al método:
listener
- objeto de agente de escucha del tipoOrderStatusListener
.orderId
- ID del pedido recibido de la compra mediante la cesta de la compra, compra con un solo clic o compra a cambio de moneda virtual como el parámetro.
Ejemplo de llamada al método 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)
Recomendamos invocar el método XStore.getOrderStatus
al abrir la interfaz de pago.
Estos métodos de compra encapsulan varios métodos de seguimiento del estado del pedido. El seguimiento se realiza conforme al siguiente algoritmo:
- Hay establecida una conexión de socket web.
- Si la conexión de socket web está establecida correctamente y el estado del pedido cambia a
done
ocancel
, se detiene el seguimiento. Si la conexión de socket web falla o la respuesta contiene datos incorrectos, el seguimiento del estado del pedido se realiza mediante sondeo corto. - El seguimiento del estado del pedido prosigue con sondeo corto. Una simple solicitud HTTP de estado del pedido se envía una vez cada 3 segundos. El seguimiento se detiene si el estado del pedido cambia a
done
ocancel
.
Utilice el método de la biblioteca de Payments
Para realizar un seguimiento de los cambios de estado de los pedidos mediante la biblioteca de Payments, utilice la devolución de llamada del estado del pago. Para ello:- Al crear el objeto
XPayments.IntentBuilder
, transmita la devolución de llamadaStatusReceivedCallback
utilizando el métodosetStatusReceivedCallback
. - Implemente el método
onSuccess
en la devolución de llamadaStatusReceivedCallback
, que se llama con cada cambio de estado único.
La información sobre el estado del pedido se transmite al método onSuccess
en un objeto de tipo InvoicesDataResponse
. Este objeto contiene una matriz de objetos InvoiceData
. Cada objeto InvoiceData
corresponde a una etapa concreta del procesamiento del pedido y contiene el estado de dicha etapa.
Por ejemplo, si el usuario inicialmente introdujo datos no válidos al realizar el pedido, aparecerá un objeto con el estado InvoicesDataResponse.CANCELED
en la lista InvoiceData
. Si después el usuario corrige los datos y realiza correctamente el pago del pedido, aparecerá un nuevo objeto InvoiceData
en la matriz, ahora con el estado InvoicesDataResponse.Status.DONE
.
El seguimiento del estado se detiene si se recibe el estado de pago final (InvoicesDataResponse.Status.DONE
o InvoicesDataResponse.Status.ERROR
).
Ejemplo
- 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()
Solicitar el estado del pedido
Para solicitar el estado actual del pago, llame al método getOrder
de la biblioteca de Store, transmitiendo los siguientes parámetros:
orderId
— el ID del pedido, que se recibió al realizar la compra a través de la cesta de la compra, compra con un solo clic o compra por moneda virtual.callback
— la devolución de llamada para recuperar la información del pedido correctamente. Cuando implemente una devolución de llamada, utilice la interfazGetStatusCallback
e implemente los métodosonSuccess
yonError
.
La información sobre el estado del pedido se transmite al método onSuccess
en un objeto de tipo InvoicesDataResponse
. Este objeto contiene una matriz de objetos InvoiceData
. Cada objeto InvoiceData
corresponde a una etapa concreta del procesamiento del pedido y contiene el estado de dicha etapa.
Por ejemplo, si el usuario inicialmente introdujo datos no válidos al realizar el pedido, aparecerá un objeto con el estado InvoicesDataResponse.CANCELED
en la lista InvoiceData
. Si después el usuario corrige los datos y realiza correctamente el pago del pedido, aparecerá un nuevo objeto InvoiceData
en la matriz, ahora con el estado InvoicesDataResponse.Status.DONE
.
El seguimiento del estado se detiene si se recibe el estado de pago final (InvoicesDataResponse.Status.DONE
o InvoicesDataResponse.Status.ERROR
).
Ejemplo
- 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")
}
})
Enlaces útiles
Última actualización: 5 de Septiembre de 2024¿Has encontrado una errata u otro error de texto? Selecciona el texto y pulsa Ctrl+Intro.