Для интеграции с «Мобильным кассиром» используйте универсальную библиотеку 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" }
}
}
Integrationru.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.