Публикация события¶
ПроАТМ постоянно отслеживает события на устройстве и получает информацию об этих событиях. ПроАТМ может быть оповещен о наступлении/изменении некоторого состояния путем публикации соответствующего события. Для публикации события используется модуль EventCatcher. События публикуются в асинхронном режиме. Таким образом, публикация события не влияет на реактивность работы приложения.
Запись данных в электронный журнал из web-приложения может производиться двумя способами: используя EventCatcher и JournalWriter. EventCatcher – более быстрый вариант, так как он сразу публикует сообщение на общей шине, без посредника в виде JournalWriter. Но JournalWriter гарантирует, что текстовое сообщение будет корректно транслировано в Unicode/1251 перед записью в журнал.
Идентификаторы подключения¶
ProgID: AxEventCatcher.EventCatcher;
CLSID: 7B3F9FA2-7B20-4F58-BA17-2782DC37E376.
Для записи данных в электронный журнал используется следующий код:
<object ID='EventCatcher' CLASSID='CLSID:7B3F9FA2-7B20-4F58-BA17-2782DC37E376' width='0' height='0'></object>
<object ID='JournalWriter' CLASSID='CLSID:E2FEFB0D-C927-402A-9F5A-8B4B9ABF5AB4' width='0' height='0'></object>
<script LANGUAGE='JavaScript' for='window' event='onload()'>
JournalWriter.WriteMessage("Текст");
// EventCatcher.GenerateEventEx("webAccessToJournal", 0, "Текст");
</script>
Методы¶
- AddSubscription(ulEventType, bstrSubsystemID, ulEventId)
Регистрация подписки на событие, опубликованное другой подсистемой.
Параметры:
ulEventType – тип события, на которое осуществляется подписка:
0
– событие, публикуемое оборудованием УС;1
– событие, публикуемое прикладными службами ПроАТМ.
bstrSubsystemID – имя узла или подсистемы, являющегося источником события. В качестве имени узла используется имя логического сервиса XFS. В качестве имени подсистемы используется имя прикладной службы ПроАТМ. В настоящее время ПроАТМ не публикует событий от прикладных служб.
ulEventId – идентификатор события, для событий от оборудования УС используются константы, описанные в спецификациях CEN/XFS 3.02.
- GenerateEvent (bstrSubsystemID, ulEventId)
Публикация события без параметра от имени прикладной службы:
Параметры:
bstrSubsystemID – имя подсистемы, от имени которой публикуется событие. В качестве имени подсистемы используется произвольная строка. В дальнейшем, эта строка может быть использована при регистрации подписки на события.
ulEventId – идентификатор события, произвольное число.
- GenerateEventEx(bstrSubsystemID, ulEventId, EventParams)
Публикация события с параметром от имени прикладной службы:
Параметры:
bstrSubsystemID – имя подсистемы, от имени которой публикуется событие. В качестве имени подсистемы используется произвольная строка. В дальнейшем, эта строка может быть использована при регистрации подписки на события.
ulEventId – идентификатор события, произвольное число.
EventParams – параметры события, произвольный объект, описанный в нотации JSON.
- IsChipCard()
Метод возвращает 1, если вставлена чиповая карта.
- IsCardSlotEmpty()
Устаревший метод возвращает 1, если слот карт пуст.
- GetCardState()
Метод позволяет определить положение карты в устройстве:
«0» – карта отсутствует;
«1» – карта в шторке;
«2» – карта в слоте;
«3» – неопределённая позиция или сбой в системе.
- ResetRCCounter()
Сбросить счётчик захваченных карт (не работает в режиме ожидания карты).
- GetRCCount()
Метод возвращает количество захваченных карт (не работает в режиме ожидания карты).
- InsertCardTimeout(nTimeout)
Перейти в режим ожидания вставки карты. Перейти в режим ожидания вставки карты, но ограничить время ожидания карты. Значение тайм-аута задаётся в миллисекундах в параметре nTimeout. Если тайм-аут истек, в javascript сбрасывается уведомляющее сообщение OnInsertCardTimeout().
- ChipResetCold()
Холодный сброс ICC.
- ChipResetWarm()
Горячий сброс ICC.
- ChipIo([in]BSTR bstrCAPDU, [out,retval]BSTR* p_bstrRAPDU)
Обмен с ICC:
C-APDU форматируется в ASCII-HEX, наличие разделителей в виде пробелов – опционально.
R-APDU двумя последними байтами содержит статусные байты sw1 sw2.
На выходе R-APDU в ASCII-HEX, без пробельных разделителей (для удобства дальнейшего разбора).
- CancelInsertion()
Отмена ожидания вставки карты, заказанного вызовами InsertCard или InsertCardTimeout.
- ResetDevice()
Осуществляет сброс картридера. В случае ошибки, событие OnError не отсылается.
- GetCardState()
Возвращает положение карты в устройстве:
«0» – карты нет в устройстве и нет в слоте вставки карты;
«1» – карта на слоте вставки/выдачи моторизованного устройства;
«2» – карта присутствует в устройстве (не находится в слоте вставки и не застряла);
«3» – карта застряла в устройстве, необходимо вмешательство извне.
- TeaseCard([in] boolean bRetainOnError)
Вставить карту без считывания данных и вернуть карту (привлечение внимание пользователя). В случае аппаратной ошибки и значениие bRetainOnError =
TRUE
, будут выполнены сброс ридера и попытка захвата карты.- EmvClessStartTransaction([in] BSTR strTlvData)
Начать бесконтактную транзакцию. strTlvData уточняет реквизиты транзакции. Реквизиты транзакции и их описание можно посмотреть по ссылкам: https://www.eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags, http://emvlab.org/emvtags/.
Основные значения:
«9c» – тип транзакции;
«9f02» – авторизованная сумма;
«9a» – дата транзакции;
«9f21» – время транзакции;
«5f2a» – код валюты транзакции.
- EmvClessCancelTransaction()
Прервать бесконтактную транзакцию (ожидание касания).
Уведомления¶
- EventAccepted(bstrSourceName, ulEventId, bstrData)
Вызывается при получении уведомления о наступлении зарегистрированного события.
Параметры:
bstrSourceName – имя подсистемы, опубликовавшей событие. При получении события от оборудования УС, содержит имя логического сервиса XFS. При получении события от прикладной службы – имя подсистемы (см. GenerateEvent/GenerateEventEx).
ulEventId – идентификатор события.
bstrData – параметры события. Строка, содержащая дополнительные параметры события. Для события прикладной службы, может содержать JSON-объект.