Kits SDK de nivel empresarial para Android / Hacer un seguimiento del estado del pedido
  Volver a Documentos

Kits SDK de nivel empresarial para Android

Hacer un seguimiento del estado del pedido

Aviso
El SDK le permite realizar un seguimiento del estado del pedido en el lado cliente de su aplicación. Sin embargo, le recomendamos que establezca un controlador de webhook de Payments para recibir información del pedido en el back-end de su aplicación. Gracias a esto podrá implementar una validación adicional de las compras completadas.

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:

Aviso

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 tipo OrderStatusListener.
  • 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.
Documentación de referencia del SDK
Obtenga más información sobre los métodos del SDK y sus parámetros.

Ejemplo de llamada al método 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)

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:

  1. Hay establecida una conexión de socket web.
  2. Si la conexión de socket web está establecida correctamente y el estado del pedido cambia a done o cancel, 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.
  3. 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 o cancel.

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:
  1. Al crear el objeto XPayments.IntentBuilder, transmita la devolución de llamada StatusReceivedCallback utilizando el método setStatusReceivedCallback.
  2. Implemente el método onSuccess en la devolución de llamada StatusReceivedCallback, que se llama con cada cambio de estado único.
Aviso

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

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()

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:

Aviso

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

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")
            }

})
¿Te ha resultado útil este artículo?
¡Gracias!
¿Hay algo en lo que podamos mejorar? Mensaje
Lo sentimos
Por favor, cuéntanos por qué no te ha resultado útil este artículo. Mensaje
¡Gracias por tu mensaje!
Nos ayudará a mejorar tu experiencia.

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.

Informar de un problema
Nos esforzamos por ofrecer contenido de calidad. Tus comentarios nos ayudan a mejorar.
Déjanos tu correo electrónico para que te podamos responder
¡Gracias por tu mensaje!