Для интеграции с «Мобильным кассиром» используйте универсальную библиотеку RemoteCashierSDK для Android. Она позволяет производить продажу и возврат разными способами с помощью App-To-App взаимодействия стороннего приложения с приложением «Мобильный кассир». Пример интеграции вы можете посмотреть по этой ссылке.
RemoteCashierSDK позволяет:
resetAuthorization
. false
переданные значения в Credentials
, Device
, Employee
сохраняются и используются при дальнейших запусках интеграции; true
сбрасывает текущую авторизацию, чтобы у пользователя была возможность выбрать кассу и сотрудника из списка. При этом, переданные значения в Credentials
, Device
, Employee
в любом случае перезаписывают более ранние, независимо от значения resetAuthorization
;token
и userId
добавлена возможность передать значение null
. В случае null
используются предыдущие переданные значения.Добавьте в проект зависимости от библиотеки RemoteCashierSDK
. Для этого:
build.gradle app
добавьте:
dependencies {
…
implementation 'com.github.Evotor-InnTech:RemoteCashierSDK:1.2.3'
}
build.gradle Project
добавьте:buildscript {
…
repositories {
…
maven { url "https://jitpack.io" }
}
}
Integration
ru.evotor.integration.Integration
— интерфейс;ru.evotor.integration.IntegrationImpl
— реализующий класс.Integration
:
private val integration: integration by lazy { IntegrationImpl() }
activity
приложения «Мобильный кассир».При вызове открывается экран продажи для заданного типа оплаты:
fun startSell(
credentials: Credentials,
receipt: Receipt,
device: Device?,
employee: Employee?,
resetAuthorization: Boolean
)
Описание параметров функции:
Credentials
— объект для авторизации. Поля класса:
token
— токен для авторизации в приложении. Подробнее см. в методе Получить токен авторизации. Может быть null
, если ранее уже был передан.userId
— id пользователя в облаке. Чтобы получить его, обратитесь с запросом на mk@evotor.ru. В письме опишите сценарий использования интеграции. Может быть null
,если ранее был передан;inn
— ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации. Может быть null
;Device
— объект для пропуска экрана выбора терминала. Может быть null
. Если null
- используются сохраненные ранее значения, если были переданы при первом запуске интеграции. Если не были ранее переданы - откроются экраны выбора кассы и сотрудника из списка Поля класса:
deviceId
— идентификатор кассы. Чтобы получить его, используйте метод Получить информацию об устройствах;qrId
— идентификатор данных для оплаты по QR-коду. Получить значение параметра нужно при заключении договора на эквайринг SberPay. Данный параметр необходимо передавать вместе с параметром deviceId
либо объект Device
должен быть пустым;Employee
— объект для пропуска экрана выбора сотрудника. Может быть null
.Если null
- используются сохраненные ранее значения, если были переданы при первом запуске интеграции. Если не были ранее переданы - откроются экраны выбора кассы и сотрудника из списка Поля класса:
employeeId
— id сотрудника. Чтобы получить его, используйте метод Получить список сотрудников;resetAuthorization
— false
переданные значения в Credentials
, Device
, Employee
сохраняются и используются при дальнейших запусках интеграции; true
сбрасывает текущую авторизацию, чтобы у пользователя была возможность выбрать кассу и сотрудника из списка. При этом, переданные значения в Credentials
, Device
, Employee
в любом случае перезаписывают более ранние, независимо от значения resetAuthorization
;Receipt
— объект чека. Поля класса:
uuid: String
— uuid чека. Можно передать произвольное уникальное значение;positions: List<Position>
— список позиций чека. Класс Position
содержит поля:
price: BigDecimal
— цена товара;name: String
— наименование товара;measureName: String
— единицы измерения товара: шт, кг, л, м, м2, м3, компл, упак, ед, дроб;quantity: BigDecimal
— количество товара;tax: Tax
— тип НДС. Возможные значения:
NO_VAT
– без НДС;VAT_0
– основная ставка НДС 0%;VAT_10
– основная ставка НДС 10%;VAT_10_110
– расчётная ставка НДС 10%;VAT_18
– основная ставка НДС 20%;VAT_18_118
– расчётная ставка НДС 20%;commodityId: String
— uuid товара. Может быть null
;priceWithDiscount: BigDecimal
— цена со скидкой. Может быть null
;settlementMethodType: SettlementMethodType
— способ оплаты позиции. Возможные значения:
FULL
— полная оплата. В том числе с учётом аванса (предварительной оплаты) в момент передачи предмета расчёта. Значение по умолчанию;ADVANCE_PAYMENT
— аванс;mark: String
— марка товара. Обязательный параметр, если указан тип маркированного товара в поле type
;type: Type
— тип товара. Возможные значения:
NORMAL
— обычный;WATER_MARKED
– бутилированная питьевая вода;DAIRY_MARKED
— молоко и молочная продукция;ALCOHOL_MARKED
— маркированный алкоголь;ALCOHOL_NOT_MARKED
— немаркированный алкоголь;TOBACCO_MARKED
— маркированный табак;SHOES_MARKED
— маркированная обувь;MEDICINE_MARKED
— маркированные лекарства;SERVICE
— услуга;PERFUME_MARKED
— маркированные духи;LIGHT_INDUSTRY_MARKED
— маркированные одежда и белье;PHOTOS_MARKED
— маркированная фотоаппаратура;TYRES_MARKED
— маркированные шины;mdlp: String
— идентификатор «Мониторинга движения лекарственных препаратов» с сайта mdlp.crpt.ru. Нужно указать, если в поле type
выбрано значение MEDICINE_MARKED
;clientEmail: String
— email покупателя. Может быть null
, если clientPhone
не null
;clientPhone: String
— номер телефона покупателя. Может быть null
, если clientEmail
не null
;paymentType: PaymentType
— тип оплаты. Возможные значения:
CASH
— наличными;ELECTRON
— через внешний терминал;TAP_ON_PHONE
— через Tap on Phone;QR_PAY
— оплата по QR-коду;shouldPrintReceipt: Boolean
— напечатать чек;paymentPlace: String
— место платежа;paymentAddress: String
— адрес платежа;receiptDiscount: BigDecimal
— скидка на чек. Может быть null
;extra: Map<String, String>
— дополнительная информация. Не отображается в бумажном и электронном чеке и не передаётся в ОФД. Может быть null
.При вызове открывается экран возврата для заданного типа оплаты:
fun startPayback(
credentials: Credentials,
receipt: Receipt,
sellReceiptUuid: String?,
device: Device?,
employee: Employee?,
resetAuthorization: Boolean
)
Где:
sellReceiptUuid
— uuid чека продажи. Может быть null
;startSell
).fun handlePaymentResult(
registry: ActivityResultRegistry,
transactionResultHandler (TransactionResult) -> Unit)
В функцию передайте параметр с типом ActivityResultRegistry
. Лямбда-выражение возвращает ответ с типом TransactionResult
.
Описание полей класса TransactionResult
:
receiptUuid: String
— uuid чека;operationResult: OperationResult
— результат операции. Класс OperationResult содержит следующие поля:
success: Boolean
— успех операции;message: String
— сообщение операции. Возможные сообщения:
Успешно
— операция выполнена успешно;Отменено
— операция отменена;Для продолжения необходимо установить приложение «Мобильный кассир» на кассу
— на кассе не установлено приложение;Неверный токен
- если при первой авторизации передаётся null
;Неверный userId
- если при первой авторизации передаётся null
;Неверный адрес почты
— передан неверный clientEmail
;Неверный номер телефона
— передан неверный clientPhone
;Введите ИНН юр. лица
— не передан ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации;Некорретный номер ИНН
— передан неверный ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации;ИНН должен состоять из 10-и или 12-и цифр
— передан неверный ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации;Ошибка соединения с сервером
— произошла ошибка при выполнении запроса.Штрихкод: {Марка} не является штрихкодом марки
— марка не прошла проверку;У товара {Название товара} пустая марка
— поле mark
не заполнено;Товары с марками: {Переданные марки} дублируются в чеке
— переданы товары с повторяющимися марками;Неверный идентификатор МД
— идентификатор МД должен содержать 14 символов;Ошибка связи с банком
— на данный момент нет связи с банком;QR Pay не установлен на терминале Эвотор
— передан неверный qrId
;Успешно, чек в очереди
— чек ушел в оффлайн очередь, так как на устройстве не было сети, и будет отправлен на кассу позже.clientEmail
или clientPhone
: телефон имеет вид +7xxxxxxxxxx, email имеет вид xx@xx.ruinn
, если в paymentType
передано значение TAP_ON_PHONE
и вход выполнен в режиме без фискализации.mark
, если указан тип маркированного товара в поле type
:
mark
;mark
не пустое и передана корректная марка товара;mdlp
содержит 14 символов, если в type
передано значение MEDICINE_MARKED
.Для проверки интеграции мы рекомендуем использовать режим без фискализации. Для его активации нужно хотя бы один раз выбрать в приложении «Мобильный кассир» вход без кассы. Это позволит не использовать настоящие чеки при тестировании.
Для последующих тестов используйте кассу с номером в формате 99000XX
. Номер тестовой кассы совпадает с её ID. Передавайте этот ID в функциях startSell
и startPayback
в параметре deviceId
.