Операции платёжного терминала
Общая информация
LIFE POS Checkout может принимать оплату по банковской карте через платежный терминал, например через QPOS mini. Для этого модуль periphery-models
, подключаемый через build.gradle
, содержит набор классов результатов выполнения операций через платежный терминал.
Для каждого действия action
используется своя модель результата операции, смотрите таблицу соответствия операций и моделей.
Модели передаются и получаются в виде json строки, которая является сериализованным представлением модели. Чтобы сериализовать модель в json строку используйте метод toJSON()
.
Для десериализации json строки в соответствующую модель используйте метод fromJSON()
с указанием нужного класса модели:
- Kotlin
- Java
GSONConverter.fromJSON(data, FDReceipt::class.java)
GSONConverter.fromJSON(data, FDReceipt.class);
Соответствие операций и моделей
Таблица соответствия операций и моделей:
Название операции | Действие (action ) | Модель результата операции |
---|---|---|
Оплата | ru.lifepay.checkout.payment_terminal.transaction.pay | PTTransaction |
Возврат | ru.lifepay.checkout.payment_terminal.transaction.refund | PTTransaction |
Отмена | ru.lifepay.checkout.payment_terminal.transaction.cancel | PTTransaction |
Получение результата оплаты/возврата/отмены | ru.lifepay.checkout.payment_terminal.transaction.get_result | PTTransaction |
Сверка итогов | ru.lifepay.checkout.payment_terminal.close_shift | PTSummaryShiftReport |
Поддерживаемые платежные терминалы и операции
LIFE POS Checkout поддерживает несколько видов платежных терминалов. Набор поддерживаемых операций у каждого терминала может отличаться. Перед использованием терминала подключите его на экране оборудования в приложении LIFE POS Checkout.
Платежные терминалы и поддерживаемые операции
Платежный терминал | Тип подключения | Оплата/Возврат/Отмена | Получение результата оплаты/возврата/отмены | Сверка итогов |
---|---|---|---|---|
Lifepay QPOS | Bluetooth | + | + | Выполняется сервером в 00:00 |
Оплата
Действие: ru.lifepay.checkout.payment_terminal.transaction.pay
Параметры входящего запроса
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
request_id | String | нет | Уникальный идентификатор запроса. Возвращается в ответе. Некоторые виды терминалов поддерживают операцию получения результата оплаты по request_id. Логику работы с мотрите в разделе Получение результата оплаты/возврата/отмены. |
metadata | HashMap<String, String> | нет | Дополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных. |
amount | Long | да | Сумма оплаты в копейках. |
Дополнительные параметры
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
login | String | да | Логин пользователя в системе Lifepay. |
password | String | да | Пароль пользователя в системе Lifepay. |
sign_on_screen | String | нет | "1" - да, "0" - нет. По умолчанию "0". Необходимо ли выводить экран для ввода подписи покупателя на смартфоне в случае необходимости подтвердить транзакцию подписью. |
String | нет | Почта на которую будет отправлен электронный СЛИП чек оплаты. | |
phone | String | нет | Телефон на который будет отправлено SMS с электронным СЛИП чеком оплаты. |
recipient_inn | String | нет | ИНН получателя платежа. |
Пример выполнения запроса
Пример выполнения запроса на Kotlin:
fun pay(
requestId: String,
metadata: HashMap\<String, String>?,
amount: Long
) {
val lifepaySpecificData = LifepaySpecificDataRepository.getData()
sendRequest(
intent = Intent("ru.lifepay.checkout.payment_terminal.transaction.pay")
.putExtra("request_id", requestId)
.putExtra("metadata", metadata)
.putExtra("amount", amount)
.apply {
putExtra("sign_on_screen", if (lifepaySpecificData.signOnScreen) "1" else "0")
if (!lifepaySpecificData.login.isNullOrEmpty()) {
putExtra("login", lifepaySpecificData.login)
}
if (!lifepaySpecificData.password.isNullOrEmpty()) {
putExtra("password", lifepaySpecificData.password)
}
if (!lifepaySpecificData.email.isNullOrEmpty()) {
putExtra("email", lifepaySpecificData.email)
}
if (!lifepaySpecificData.phone.isNullOrEmpty()) {
putExtra("phone", lifepaySpecificData.phone)
}
if (!lifepaySpecificData.recipientInn.isNullOrEmpty()) {
putExtra("recipient_inn", lifepaySpecificData.recipientInn)
}
}
)
}
Возврат
Действие: ru.lifepay.checkout.payment_terminal.transaction.refund
Параметры входящего запроса
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
request_id | String | нет | Уникальный идентификатор запроса. Возвращается в ответе. Некоторые виды терминалов поддерживают операцию получения результата возврата по request_id. Логику работы смотрите в разделе Получение результата оплаты/возврата/отмены. |
metadata | HashMap<String, String> | нет | Дополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных. |
amount | Long | да | Сумма возврата в копейках. |
primary_transaction | String | да | Сериализованный в json строку объект PTTransaction полученный в результатах оплаты. |
Дополнительные параметры
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
login | String | да | Логин пользователя в системе Lifepay. |
password | String | да | Пароль пользователя в системе Lifepay. |
sign_on_screen | String | нет | "1" - да, "0" - нет. По умолчанию "0". Необходимо ли выводить экран для ввода подписи покупателя на смартфоне в случае необходимости подтвердить транзакцию подписью. |
Пример выполнения запроса
Пример выполнения запроса на Kotlin:
fun refund(
requestId: String,
amount: Long,
primaryTransaction: PTTransaction
) {
val lifepaySpecificData = LifepaySpecificDataRepository.getData()
sendRequest(
intent = Intent("ru.lifepay.checkout.payment_terminal.transaction.refund")
.putExtra("request_id", requestId)
.putExtra("amount", amount)
.putExtra("primary_transaction", primaryTransaction.toJSON())
.apply {
putExtra("sign_on_screen", if (lifepaySpecificData.signOnScreen) "1" else "0")
if (!lifepaySpecificData.login.isNullOrEmpty()) {
putExtra("login", lifepaySpecificData.login)
}
if (!lifepaySpecificData.password.isNullOrEmpty()) {
putExtra("password", lifepaySpecificData.password)
}
}
)
}
Отмена
Действие: ru.lifepay.checkout.payment_terminal.transaction.cancel
Параметры входящего запроса
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
request_id | String | нет | Уникальный идентификатор запроса. Возвращается в ответе. Некоторые виды терминалов поддерживают операцию получения результата отмены по request_id. Логику работы смотрите в разделе Получение результата оплаты/возврата/отмены. |
metadata | HashMap<String, String> | нет | Дополнительные пользовательские данные. Возвращаются в ответе. Смотрите раздел Передача дополнительных данных |
amount | Long | да | Сумма отмены в копейках. |
primary_transaction | String | да | Сериализованный в json строку объект PTTransaction полученный в результатах оплаты. |
Дополнительные параметры
Название | Тип | Обязательность | Значение/описание |
---|---|---|---|
login | String | да | Логин пользователя в системе Lifepay. |
password | String | да | Пароль пользователя в системе Lifepay. |
sign_on_screen | String | нет | "1" - да, "0" - нет. По умолчанию "0". Необходимо ли выводить экран для ввода подписи покупателя на смартфоне в случае необходимости подтвердить транзакцию подписью. |
Пример выполнения запроса
Пример выполнения запроса на Kotlin:
fun cancel(
requestId: String,
amount: Long,
primaryTransaction: PTTransaction
) {
val lifepaySpecificData = LifepaySpecificDataRepository.getData()
sendRequest(
intent = Intent("ru.lifepay.checkout.payment_terminal.transaction.cancel")
.putExtra("request_id", requestId)
.putExtra("amount", amount)
.putExtra("primary_transaction", primaryTransaction.toJSON())
.apply {
putExtra("sign_on_screen", if (lifepaySpecificData.signOnScreen) "1" else "0")
if (!lifepaySpecificData.login.isNullOrEmpty()) {
putExtra("login", lifepaySpecificData.login)
}
if (!lifepaySpecificData.password.isNullOrEmpty()) {
putExtra("password", lifepaySpecificData.password)
}
}
)
}