SDK enterprise-уровня для Android / Отслеживание статуса заказа
  На главную

SDK enterprise-уровня для Android

Отслеживание статуса заказа

Внимание
SDK позволяет отслеживать статус заказа на клиентской части вашего приложения. Однако мы рекомендуем настроить обработчик вебхука Успешный платеж и получать информацию о заказе на серверной части вашего приложения. Это позволит реализовать дополнительную валидацию совершенных покупок.

После совершения покупки в вашем приложении могут выполняться следующие действия:

  • отображение статуса заказа в интерфейсе приложения;
  • пополнение баланса виртуальной валюты пользователя в результате успешной оплаты;
  • начисление купленных предметов пользователю в результате успешной оплаты.

Чтобы реализовать логику этих действий с помощью SDK, вы можете отслеживать статус заказа следующими способами:

Внимание

Если в своем приложении вы используете библиотеки Store и Payments, мы рекомендуем использовать для отслеживания заказа метод библиотеки Store.

Если вы используете только библиотеку Payments, подпишитесь на изменение статуса заказа с помощью метода библиотеки Payments. Используйте метод запроса  статуса заказа только в качестве вспомогательного способа получения данных, чтобы избежать чрезмерной нагрузки на системы Xsolla.

Подписка на изменение статуса заказа

С помощью метода библиотеки Store

Чтобы подписаться на изменения статуса заказа, используйте метод SDK getOrderStatus из библиотеки Store. Передайте в метод следующие параметры:

  • listener — объект слушателя типа OrderStatusListener;
  • 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)

Мы рекомендуем вызывать метод XStore.getOrderStatus вместе с открытием платежного интерфейса.

Этот метод инкапсулирует в себя несколько методов отслеживания статуса заказа. Отслеживание выполняется по следующему алгоритму:

  1. Устанавливается веб-сокет-соединение.
  2. Если соединение установлено и статус заказа изменен на done или cancel, отслеживание прекращается. Если не удалось установить веб-сокет-соединение либо в ответе приходят некорректные данные, статус заказа отслеживается с помощью short-polling.
  3. Отслеживание статуса заказа продолжается с помощью short-polling. Раз в 3 секунды отправляется простой HTTP-запрос статуса заказа. Отслеживание прекращается, когда статус заказа изменится на done или cancel.

С помощью метода библиотеки Payments

Чтобы отслеживать изменения статуса платежа с помощью библиотеки Payments, используйте обработчик статуса платежа. Для этого:
  1. При создании объекта XPayments.IntentBuilderпередайте обработчик StatusReceivedCallback с помощью метода setStatusReceivedCallback.
  2. В обработчике onSuccess реализуйте метод StatusReceivedCallback, который вызывается при каждом уникальном изменении статуса.
Внимание

Данные о статусе заказа передаются в метод onSuccess в объекте с типом InvoicesDataResponse. Этот объект содержит массив объектов InvoiceData. Каждый объект InvoiceData соответствует определенному этапу в обработке заказа и содержит статус этого этапа.

Например, если пользователь сначала ввел некорректные данные при оформлении заказа, в списке InvoiceData появится объект со статусом InvoicesDataResponse.CANCELED. Если затем пользователь исправит данные и успешно оплатит заказ, в массиве появится новый объект InvoiceData уже со статусом InvoicesDataResponse.Status.DONE.

Отслеживание статуса прекращается, если получен финальный статус платежа (InvoicesDataResponse.Status.DONE или InvoicesDataResponse.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()

Запрос статуса заказа

Для запроса текущего статуса платежной транзакции вызовите метод getOrder из библиотеки Payments, передав в него следующие параметры:

Внимание

Данные о статусе заказа передаются в метод onSuccess в объекте с типом InvoicesDataResponse. Этот объект содержит массив объектов InvoiceData. Каждый объект InvoiceData соответствует определенному этапу в обработке заказа и содержит статус этого этапа.

Например, если пользователь сначала ввел некорректные данные при оформлении заказа, в списке InvoiceData появится объект со статусом InvoicesDataResponse.CANCELED. Если затем пользователь исправит данные и успешно оплатит заказ, в массиве появится новый объект InvoiceData уже со статусом InvoicesDataResponse.Status.DONE.

Отслеживание статуса прекращается, если получен финальный статус платежа (InvoicesDataResponse.Status.DONE или InvoicesDataResponse.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")
            }

})
Была ли статья полезна?
Спасибо!
Что может сделать страницу еще лучше? Сообщение
Жаль, что так произошло
Расскажите, почему статья не была полезна. Сообщение
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.

Полезные ссылки

Последнее обновление: 5 сентября 2024

Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.

Сообщите о проблеме
Мы постоянно улучшаем качество нашей документации. Ваш отзыв поможет нам в этом.
Укажите email-адрес, чтобы мы могли связаться с вами
Спасибо за обратную связь!