Публикация события

ПроАТМ постоянно отслеживает события на устройстве и получает информацию об этих событиях. ПроАТМ может быть оповещен о наступлении/изменении некоторого состояния путем публикации соответствующего события. Для публикации события используется модуль 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-объект.