Перейти к основному содержимому

Операции СБП

Через 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)