Операции СБП
Через 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 в процессе попыток её выполнения.
Если вам нужно передавать ваш внутренний глобальный идентификатор заказа/покупки/продажи вместе с параметрами операции, смотрите раздел Передача дополнительных данных.