Для интеграции с «Мобильным кассиром» используйте универсальную библиотеку RemoteCashierSDK для Android. Она позволяет производить продажу и возврат разными способами с помощью App-To-App взаимодействия стороннего приложения с приложением «Мобильный кассир». Пример интеграции вы можете посмотреть по этой ссылке.
RemoteCashierSDK 1.1.1 позволяет:
clientEmail
, clientPhone
, inn
;Добавьте в проект зависимости от библиотеки RemoteCashierSDK
. Для этого:
build.gradle app
добавьте:
dependencies {
…
implementation 'com.github.Evotor—InnTech:RemoteCashierSDK:1.1.1'
}
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 startSellV2(
credentials: Credentials_V2,
receipt: Receipt_V2,
device: Device_V2?,
employee: Employee_V2?,
resetAuthorization: Boolean
)
Где V2
- текущая версия компонентов библиотеки
Описание параметров функции:
Credentials_V2
— объект для авторизации. Поля класса:
token
— токен для авторизации в приложении. Подробнее см. в методе Получить токен авторизации;userId
— id пользователя в облаке. Чтобы получить его, обратитесь с запросом на mk@evotor.ru. В письме опишите сценарий использования интеграции;inn
— ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации. Может быть null
;Device_V2
— объект для пропуска экрана выбора терминала. Поля класса:
deviceId
— идентификатор кассы. Чтобы получить его, используйте метод Получить информацию об устройствах;Employee_V2
— объект для пропуска экрана выбора сотрудника. Поля класса:
employeeId
— id сотрудника. Чтобы получить его, используйте метод Получить список сотрудников;resetAuthorization
— опция для сброса последней авторизации: true
— при входе нужна авторизация, false
— использовать сохранённые данные о пользователе и кассе;Receipt_V2
— объект чека. Поля класса:
uuid: String
— uuid чека. Можно передать произвольное уникальное значение;positions: List<Position_V1>
— список позиций чека. Класс Position_V1
содержит поля:
price: BigDecimal
— цена товара;name: String
— наименование товара;measureName: String
— единицы измерения товара: шт, кг, л, м, м2, м3, компл, упак, ед, дроб;quantity: BigDecimal
— количество товара;tax: String
— тип НДС. Возможные значения:
null
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
;type: Type_V1
— тип товара. Может быть null
. Доступные объекты класса Type_V1
:
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
— маркированные шины;clientEmail: String
— email покупателя. Может быть null
, если clientPhone
не null
;clientPhone: String
— номер телефона покупателя. Может быть null
, если clientEmail
не null
;paymentType: paymentType_V2
— тип оплаты. Доступные объекты класса:
CASH
— наличными;ELECTRON
— через внешний терминал;TAP_ON_PHONE
— через Tap on Phone;shouldPrintReceipt: Boolean
— напечатать чек;paymentPlace: String
— место платежа;paymentAddress: String
— адрес платежа;receiptDiscount: BigDecimal
— скидка на чек. Может быть null
.При вызове открывается экран возврата для заданного типа оплаты:
fun startPaybackV2(
credentials: Credentials_V2,
receipt: Receipt_V2,
sellReceiptUuid: String?,
device: Device_V2?,
employee: Employee_V2?,
resetAuthorization: Boolean
)
Где:
sellReceiptUuid
— uuid чека продажи. Может быть null
;startSellV2
).fun handlePaymentResult(
registry: ActivityResultRegistry,
transactionResultHandler (TransactionResult) -> Unit)
В функцию передайте параметр с типом ActivityResultRegistry
. Лямбда-выражение возвращает ответ с типом TransactionResult
.
Описание полей класса TransactionResult
:
receiptUuid: String
— uuid чека;operationResult: OperationResult
— результат операции. Класс OperationResult содержит следующие поля:
success: Boolean
— успех операции;message: String
— сообщение операции. Возможные сообщения:
Успешно
— операция выполнена успешно;Отменено
— операция отменена;Для продолжения необходимо установить приложение «Мобильный кассир» на кассу
— на кассе не установлено приложение;Неверный адрес почты
— передан неверный clientEmail
;Неверный номер телефона
— передан неверный clientPhone
;Введите ИНН юр. лица
— не передан ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации;Некорретный номер ИНН
— передан неверный ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации;ИНН должен состоять из 10-и или 12-и цифр
— передан неверный ИНН организации для авторизации в Tap On Phone. Используется при работе в режиме без фискализации;Ошибка соединения с сервером
— произошла ошибка при выполнении запроса.clientEmail
или clientPhone
: телефон имеет вид +7xxxxxxxxxx, email имеет вид xx@xx.ruinn
, если в paymentType
передано значение TAP_ON_PHONE
и вход выполнен в режиме без фискализации.Для проверки интеграции мы рекомендуем использовать в «Мобильном кассире» режим без фискализации. Это позволит не использовать настоящие чеки при тестировании.
Для использования режима без фискализации на экране выбора терминала выберите виртуальную кассу. Или в функциях startSellV2
, startPaybackV2
передайте deviceId
виртуальной кассы.