Введение
Данный документ является руководством программиста для интеграции с программной кассой (ПК
).
Вся интеракция с ПК происходит без взаимодейтсвия с пользователем. Исключением является:
- Ожидание прикладывания карты пользователем.
Способы взаимодействия
- Android
Intent
- Для взаимодействия с ПК по интентам необходимо создать Intent передав в него тип action -
by.ikassa.smartx.android.TRANSACTION
. Пример:val intent = Intent("by.ikassa.smartx.android.TRANSACTION")
- Для взаимодействия с ПК по интентам необходимо создать Intent передав в него тип action -
- HTTP Сервер
- Для взаимодействия с ПК по HTTP, необходимо включить режим сервера в настройках кассы.
- Отправка происходит через
POST
запросы используя порт37015
по адресуv1
. Пример:http://192.168.1.2:37015/v1
Для выбора типа операции необходимо предать Header
с ключом INTENT_OPERATION_TYPE
и значением из доступнх типов операций.
Регистр ключа ОБЯЗАН
быть передан в верхнем регистре.
Значение передаваемое по ключу регистронезависимо и может быть передано в любом регистре.
При получении неизвестного типа операции или его отсутсвии будет выброшена ошибка.
SSDP (Simple Service Discovery Protocol)
-
Пример запроса на python
- ssdp discover --st 'ikassa-smartx'
-
Пример ответа
{
[::ffff:192.168.88.91]:41724 - - [Wed May 15 17:02:11 2024] HTTP/1.1 200 OK
ST: ikassa-smartx
USN: uuid:dcc76660-c8f5-11ed-afa1-0242ac120002
LOCATION: http://192.168.88.91:37015
SERIAL_NUMBER: AVQ11129961000
REG_NUMBER: 129961000
}
- LOCATION - ip-адрес устройства и порт.
- SERIAL_NUMBER: серийный номер СКО.
- REG_NUMBER: регистрационный номер СКО.
Способы авторизации
- Для того чтобы работать с кассой, необходима авторизация. После успешной авторизации, касса остается авторизована, до перезапуска ПК.
- При передаче специального флага, ПК помимо авторизации вернет
token
. Этот токен валиден в течение24 часов
и дает возможность автоматической авторизации в случае если ПК была перезапущена. Для использования этой возможности необходимо передать полученныйtoken
вHeader
с ключомAuth-token
.
Способы передачи INTENT_OPERATION_TYPE
Типом операции во всех случаях является строка String
- Android
Intent
- Добавить поле в интент
intent.putExtra("INTENT_OPERATION_TYPE", #ТипОперации#)
.
- Добавить поле в интент
- HTTP Сервер
- Передать в
Header
запроса["Content-Type": "application/json"]
- Передать в
Header
запроса["INTENT_OPERATION_TYPE": #ТипОперации#]
.
- Передать в
Способы передачи Auth-token
Типом операции во всех случаях является строка String
- Android
Intent
- Добавить поле в интент
intent.putExtra("Auth-token", #Токен#)
.
- Добавить поле в интент
- HTTP Сервер
- Передать в
Header
запроса["Auth-token": #Токен#]
.
- Передать в
Способы передачи тела запроса
Телом операции в запросах является Json строка String
.
- Android
Intent
- Добавить поле в интент
intent.putExtra("INTENT_OPERATION_DATA", #JsonСтрока#)
.
- Добавить поле в интент
- HTTP Сервер
- Передать в теле запроса Json строку.
Параметр финиширования активити
Передать в queryParam
запроса closeActivity=true
Пример запроса:
suspend fun send() {
val response: String = client.post("http://192.168.88.18:37015/v1?closeActivity=true", A(cashier = "admin", sum = "100")) {
contentType(ContentType.Application.Json)
header("INTENT_OPERATION_TYPE", "DEPOSIT")
}
println(response)
Получение ответа
В качестве ответа ПК возвращает обратно Json строку с обязательными полями вида Подробнее:
{
"messageDetail": "Успешная оплата",
"messageTitle": "Успех",
"registerNumberSKO": "123456789",
"resultCode": 200,
"type": "SALE"
}
- Android
Intent
- Проверить resultCode на ошибку:
- -1 (Activity.RESULT_OK) – ОК.
- -2 – Ошибка.
- Использовать ключ
INTENT_OPERATION_RESULT_INFO
для получения результата. Пример:val json = intent.getStringExtra("INTENT_OPERATION_RESULT_INFO")
.
- Проверить resultCode на ошибку:
- HTTP Сервер
- Проверить статус ответа:
- 200 - ОК
- 400 - Ошибка
- Получить результат из body ответа.
- Проверить статус ответа: