СБП
Модуль periphery-models
подключаемый через build.gradle
содержит набор классов (моделей) результатов выполнения операций через СБП.
Модели передаются и получаются в виде json строки, которая является сериализованным представлением модели.
Чтобы сериализовать модель в json строку, необходимо использовать метод toJSON()
.
Для десериализации json строки в соответствующую модель следует использовать следующий метод (нужно указать необходимый класс модели):
kotlin
GSONConverter.fromJSON(data, QPTransaction::class.java)
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 полученный в результатах оплаты. |
Параметры результата запроса
В случае успешной обработки запроса приложение LIFE POS Checkout возвращает resultCode = Activity.RESULT_OK (-1)
и экземпляр класса Intent
с действием action
которое было указано во входящем интенте.
Если 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
(метод getExtras()
в случае java) класса 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 | Результат операции неизвестен. Может выдаваться только для операции возврата. Логику работы смотрите в разделе Обработка ошибок возврата. |
Обработка ошибок возврата
Т.к. взаимодействие с сервером СБП осуществляется по сети интернет, то при осуществлении операции возврат могут возникать ситуации, когда операция была успешно проведена, но до клиентского приложения данная информация не дошла в связи с потерей интернет соединения на долгом временном интервале. В этом случае приложение LIFE POS Checkout вернет ошибку неизвестного результата, то есть ошибку с типом error_type == unknown_result_error
. В этом случае необходимо повторить операцию возврата, передав то же значение параметра request_id
, которое было передано в первоначальной операции. В этом случае приложение LIFE POS Checkout не будет создавать новую операцию возврата, а получит результат первоначальной операции.
Если тип ошибки отличается от ошибки неизвестного результата, то есть error_type != unknown_result_error
, то это означает что операция возврата завершилась ошибкой. В этом случае для повторного вызова операции возврата необходимо использовать новое значение параметра request_id
.
Не используйте в качестве request_id
какие либо внутренние глобальные идентификаторы заказа/покупки/продажи из своей системы.
Как описано выше для одной и той же операции может потребоваться изменять request_id
, в процессе попыток ее проведения.
Если вам требуется передавать ваш внутренний глобальный идентификатор заказа/покупки/продажи вместе с параметрами операции смотрите раздел Передача дополнительных данных.
Передача дополнительных данных
Приложение LIFE POS Checkout позволяет передавать дополнительные данные при проведении операций. Например это может быть уникальный идентификатор заказа/покупки/продажи из вашей системы.
Для реализации этого механизма, необходимо передавать параметр metadata
в параметрах запросов.
Пример заполнения параметра metadata
:
kotlin
val metadata = HashMap<String, String>().apply {
put("OrderId", "12345")
}
intent.putExtra("metadata", metadata)
java
HashMap<String, String> metadata = new HashMap<>();
metadata.put("OrderId", "12345");
intent.putExtra("metadata", metadata);
Никаких проверок на дублирование для данного параметра не производится.