Введение
Данный документ является руководством программиста для интеграции с программной кассой (ПК).
Вся интеракция с ПК происходит без взаимодейтсвия с пользователем. Исключением является:
- Ожидание прикладывания карты пользователем.
Способы взаимодействия
- 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 ответа.
- Проверить статус ответа: