Операции СБП
Через LIFE POS Checkout вы можете принимать оплату через СБП по QR-коду. Для этого модуль periphery-models
, подключаемый через build.gradle
, содержит набор классов результатов выполнения операций через СБП.
Передача моделей происходит в виде json-строки, которая является сериализованным представлением модели. Чтобы сериализовать модель в json-строку используйте метод toJSON()
.
Для десериализации json-строки в соответствующую модель следует использовать метод fromJSON
с указанием нужного класса модели:
- Kotlin
- Java
GSONConverter.fromJSON(data, QPTransaction::class.java)
GSONConverter.fromJSON(data, QPTransaction.class);
Параметры запроса
Оплата
Действие: ru.lifepay.checkout.quick_payments_terminal.pay
Каждый запрос создает новый QR-код для оплаты.
Параметры запроса:
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
request_id | String | нет | Уникальный идентификатор запроса. Возвращается в ответе. |
metadata | HashMap<String, String> | нет | Дополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных. |
amount | Long | да | Сумма оплаты в копейках. |
purpose | String | да | Назначение платежа. Длина n <= 255. |
Возврат
Действие: ru.lifepay.checkout.quick_payments_terminal.refund
Параметры запроса:
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
request_id | String | нет | Уникальный идентификатор запроса. Возвращается в ответе. Используется в том числе для получения результата возврата при повторном запросе, если в рамках первого запроса не удалось получить результат. Логику работы смотрите в разделе Обработка ошибок возврата. |
metadata | HashMap<String, String> | нет | Дополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных. |
amount | Long | да | Сумма возврата в копейках. |
primary_transaction | String | да | Сериализованный в json строку объект QPTransaction полученный в результатах оплаты. |
Параметры результата запроса
При успешном запросе Checkout возвращает resultCode = Activity.RESULT_OK (-1)
и экземпляр класса Intent
с действием action
, которое было указано во входящем интенте.
При ошибке Checkout вернёт resultCode
со значением отличным от Activity.RESULT_OK
или intent
будет содержать null
.
Успешная обработка запроса не означает, что операция проведена успешно. Для определения факта успешного выполнения операции проверяйте значение параметра code
:
- значение
0
— операция выполнена успешно; - значение отличное от
0
— произошла ошибка.
Параметры результата при успешном выполнении операции:
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
code | Int | да | 0 - операция проведена успешно. |
transaction | String | да | Сериализованный в json строку объект QPTransaction. |
request_id | String | да | Значение request_id, которое было передано в запросе. Если значение не было передано в запросе, то оно генерируется автоматически. |
metadata | HashMap<String, String> | нет | Значение metadata, которое было передано в запросе. Извлекается через extras.getSerializable("metadata"). |
Значения полей можно извлекать из экземпляра класса Bundle
получаемого из свойства extras
класса Intent
при помощи методов extras.getInt(...)
и extras.getString(...)
.
Параметры результата при ошибке:
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
code | Int | да | Отличное от нуля значение. Означает, что произошла ошибка. |
request_id | String | да | Значение request_id, которое было передано в запросе. Если значение не было передано в запросе, то оно генерируется автоматически. |
metadata | HashMap<String, String> | нет | Значение metadata, которое было передано в запросе. Извлекается через extras.getSerializable("metadata"). |
error_type | String | да | Тип ошибки. Каждый тип имеет свою собственную логику обработки. Смотрите Типы ошибок. |
message | String | да | Текст ошибки для вывода пользователю. |
Тип ошибки (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
:
- Kotlin
- Java
val metadata = HashMap\<String, String>().apply {
put("OrderId", "12345")
}
intent.putExtra("metadata", metadata)
HashMap<String, String> metadata = new HashMap<>();
metadata.put("OrderId", "12345");
intent.putExtra("metadata", metadata);