Skip to main content

Операции СБП

Через LIFE POS Checkout вы можете принимать оплату через СБП по QR-коду. Для этого модуль periphery-models, подключаемый через build.gradle, содержит набор классов результатов выполнения операций через СБП.

Передача моделей происходит в виде json-строки, которая является сериализованным представлением модели. Чтобы сериализовать модель в json-строку используйте метод toJSON().

Для десериализации json-строки в соответствующую модель следует использовать метод fromJSON с указанием нужного класса модели:

GSONConverter.fromJSON(data, QPTransaction::class.java)

Параметры запроса

Оплата

Действие: ru.lifepay.checkout.quick_payments_terminal.pay

Каждый запрос создает новый QR-код для оплаты.

Параметры запроса:

НазваниеТипОбязательностьЗначение/описание
request_idStringнетУникальный идентификатор запроса. Возвращается в ответе.
metadataHashMap<String, String>нетДополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных.
amountLongдаСумма оплаты в копейках.
purposeStringдаНазначение платежа. Длина n <= 255.

Возврат

Действие: ru.lifepay.checkout.quick_payments_terminal.refund

Параметры запроса:

НазваниеТипОбязательностьЗначение/описание
request_idStringнетУникальный идентификатор запроса. Возвращается в ответе. Используется в том числе для получения результата возврата при повторном запросе, если в рамках первого запроса не удалось получить результат. Логику работы смотрите в разделе Обработка ошибок возврата.
metadataHashMap<String, String>нетДополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных.
amountLongдаСумма возврата в копейках.
primary_transactionStringдаСериализованный в json строку объект QPTransaction полученный в результатах оплаты.

Параметры результата запроса

При успешном запросе Checkout возвращает resultCode = Activity.RESULT_OK (-1) и экземпляр класса Intent с действием action, которое было указано во входящем интенте.

При ошибке Checkout вернёт resultCode со значением отличным от Activity.RESULT_OK или intent будет содержать null.

Успешная обработка запроса не означает, что операция проведена успешно. Для определения факта успешного выполнения операции проверяйте значение параметра code:

  • значение 0 — операция выполнена успешно;
  • значение отличное от 0 — произошла ошибка.

Параметры результата при успешном выполнении операции:

НазваниеТипОбязательностьЗначение/описание
codeIntда0 - операция проведена успешно.
transactionStringдаСериализованный в json строку объект QPTransaction.
request_idStringдаЗначение request_id, которое было передано в запросе. Если значение не было передано в запросе, то оно генерируется автоматически.
metadataHashMap<String, String>нетЗначение metadata, которое было передано в запросе. Извлекается через extras.getSerializable("metadata").

Значения полей можно извлекать из экземпляра класса Bundle получаемого из свойства extras класса Intent при помощи методов extras.getInt(...) и extras.getString(...).

Параметры результата при ошибке:

НазваниеТипОбязательностьЗначение/описание
codeIntдаОтличное от нуля значение. Означает, что произошла ошибка.
request_idStringдаЗначение request_id, которое было передано в запросе. Если значение не было передано в запросе, то оно генерируется автоматически.
metadataHashMap<String, String>нетЗначение metadata, которое было передано в запросе. Извлекается через extras.getSerializable("metadata").
error_typeStringдаТип ошибки. Каждый тип имеет свою собственную логику обработки. Смотрите Типы ошибок.
messageStringдаТекст ошибки для вывода пользователю.

Возможные типы ошибок:

Тип ошибки (error_type)Описание
default_errorОбычная ошибка.
unknown_result_errorРезультат операции неизвестен. Может выдаваться только для операции возврата. Логику работы смотрите в разделе Обработка ошибок возврата.

Обработка ошибок при возврате

При выполнении возврата операция может быть проведена успешно, но информацию не удалось отправить в клиентское приложение. Например, из-за проблем с интернетом. В это случае Checkout вернёт ошибку error_type == unknown_result_error. При таком типе ошибки повторите операцию возврата с тем же значением в параметре request_id, которое было передано в первой операции. Checkout не создаст новую операцию возврата, а получит результат первой операции.

Если error_type отличается от unknown_result_error, то операция возврата завершилась ошибкой. В этом случае для повторного вызова операции возврата используйте новое значение параметра request_id.

Не используйте в качестве request_id глобальные идентификаторы операции из своего приложения. Для одной и той же операции может потребоваться изменять request_id в процессе попыток её выполнения.

Если вам нужно передавать ваш внутренний глобальный идентификатор заказа/покупки/продажи вместе с параметрами операции, смотрите раздел Передача дополнительных данных.

Передача дополнительных данных

Приложение LIFE POS Checkout позволяет передавать дополнительные данные при проведении операций. Например, уникальный идентификатор операции из вашей системы. Для этого передавайте metadata в параметрах запросов. Никаких проверок на дублирование для данного параметра нет.

Пример заполнения параметра metadata:

val metadata = HashMap\<String, String>().apply {
put("OrderId", "12345")
}
intent.putExtra("metadata", metadata)