Вызов из приложения на кассе: Intent
актуальнаяВаше Android-приложение на том же устройстве вызывает YaKassa и получает результат чека или операции со сменой.
Подходит, если ваше приложение стоит прямо на терминале. Если программа работает на другом устройстве, берите обмен v4.
Вызов
| Параметр | Значение |
|---|---|
| Пакет | kg.yaros.kkm |
| Действие | YAROS_KKM_ACTION |
| Входные данные | JSON строкой в extra data |
| Результат | JSON строкой в extra result_data |
private val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
val json = result.data?.getStringExtra("result_data")
if (json == null) {
// результата нет: операцию отменили или она не прошла, см. ниже
}
}
fun sendToKassa(jsonString: String) {
val intent = Intent("YAROS_KKM_ACTION").apply {
setPackage("kg.yaros.kkm")
putExtra("data", jsonString)
}
launcher.launch(intent)
}На Android 11 и новее добавьте <queries><package android:name="kg.yaros.kkm" /></queries> в манифест, если проверяете наличие кассы заранее. Касса должна быть авторизована.
Чек
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"cashless": true,
"operation": "INCOME",
"printInfo": "Спасибо за покупку",
"products": [
{ "id": "product-1", "name": "Товар 1", "price": 100.50, "quantity": 2,
"vat_value": 12, "st_value": 1, "calcItemAttributeCode": "0" }
]
}| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
id | String | да | UUID операции |
operation | String | да | INCOME продажа, INCOME_RETURN возврат продажи |
products | Array | да | список товаров или услуг |
cashless | Boolean | нет | безналичная оплата. Если поля нет, способ можно выбрать на экране кассы |
cash_sum | Decimal | нет | сумма наличными |
cashless_sum | Decimal | нет | сумма безналично |
fd_number | String | для возврата | номер исходного чека |
rrn | String | для возврата на карту | RRN исходной оплаты: касса вернёт деньги на карту, чек после успеха |
skip_bank | Boolean | нет | true: безнал проведён вне кассы, банк не вызывается. В возврате значит, что продажа прошла без банка |
printInfo | String | нет | текст в конце чека |
fiscal | Boolean | нет | признак фискализации, по умолчанию true |
Поля позиции те же, что в обмене v4. Правила возврата на карту тоже те же.
Для смешанной оплаты передайте cash_sum и cashless_sum одновременно, сумма должна равняться сумме позиций. Поле cashless при этом можно не передавать.
Результат чека
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "OK",
"qr": "https://…",
"amount": 201.00,
"cashless": true,
"fdNumber": "12345"
}| Поле | Тип | Описание |
|---|---|---|
id | String | UUID из запроса |
status | String | OK |
qr | String | ссылка для проверки в ГНС |
amount | Decimal | оплаченная сумма |
cashless | Boolean | признак безналичного расчёта |
fdNumber | String | номер фискального документа |
Смена
Тот же вызов и то же extra data. Поле products не передаётся.
{ "id": "shift-operation-uuid", "type": "SHIFT", "operation": "OPEN" }{ "id": "shift-operation-uuid", "type": "SHIFT", "operation": "CLOSE" }{ "id": "shift-operation-uuid", "type": "SHIFT", "operation": "STATE" }| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
id | String | да | UUID операции |
type | String | рекомендуется | SHIFT |
operation | String | да | OPEN, CLOSE или STATE |
{ "id": "shift-operation-uuid", "status": "OK", "operation": "OPEN" }Как и у чека, результат приходит только при успехе.
Настройки на кассе
Настраиваются в Настройки → Обмен и действуют только на Intent.
| Настройка | Что делает |
|---|---|
| Автоматическая обработка | включена: документ проводится сразу. Выключена: позиции попадают в продажу на экране, и чек завершает кассир. Возврат всегда проводится сразу |
| Автоматическое завершение | YaKassa закрывается после обработки и возвращает управление вашему приложению |
Совместимость
Старый формат чеков не менялся: для чеков поле type не требуется. Операции со сменой добавлены поверх него и работают с версии кассы 2.2.09.361. Поля rrn и skip_bank см. в таблице версий.