Быстрая навигация
802.11ac 802.11ac Wave 2 802.11n Android DVB-T2 Google hAP HotSpot Intel IPSec Keenetic LTE Mikrotik MU-MIMO Netis Realtek RouterBOARD RouterOS Rozetka rozetka.com.ua Strong Trimax Ubiquiti UBNT UniFi wAP 60G Wi-Fi Winbox wireless Zyxel безопасность маршрутизатор обзор обновление промо промо-код прошивка роутер скидки уязвимостьИнтеграция POS-терминалов Ingenico с торговым программным обеспечением. На примере Ingenico iCT220/250 + 1С 7.7 (1С 8)
Немного предыстории
Компания, в которой я работаю, вот уже более 15 лет работает в сфере торговли. 6 лет назад компания перешла на электронный документооборот. Изначально в торговле использовались кассовые аппараты DATECS FP3141T + 1С 7.7 в терминальном режиме.
Однако аппараты FP3141T весьма плохо справлялись с возложенной на них работой и часто выходили из строя. 3 года назад аппараты были заменены на DATECS FP-T260.
Где-то 1 год назад в Украине были приняты изменения, согласно которым, все фискализированные кассовые аппараты должны быть подключены к сети Интернет (т.е. иметь модем) и передавать данные (по сути, отчёт в электронном виде; контрольная лента) в налоговую инспекцию.
Функционал постепенно расширялся и на сегодняшний день, в новых прошивках кассовых регистраторов, используется контрольная лента в электронном формате (КЛЭФ). Электронная лента позволяет существенно экономить расходы на кассовой бумаге.
Ещё год назад в требования к КЛЭФ были внесены изменения, согласно которым, при проведении оплаты банковской карты, в чек должен передаваться идентификатор транзакции (он же RRN).
Компания SystemGroup (АОЗТ «Датекс Украина» и ДП «Компания «Atlas» ) внесла соответствующие изменения в ПО своих регистраторов.
Таким образом, аппараты FP-T260 с прошивкой v.4.20 подлежат перепрошивке на v.4.00. Да-да, вы не ошиблись, новая версия имеет меньший порядковый номер. В отличие от 4.20, в версии 4.00 контрольная лента ведётся в электронном формате (не печатается), а в параметры при оплате картой добавлен RRN.
А теперь самое главное: как передать RRN из POS-терминала в 1С для последующей печати в чек?
Мы тоже очень долго решали этот вопрос. Изначально мы обратились в «Укрэксимбанк» - ничего внятного по этому поводу нам не ответили. Техподдержка «на высоте».
Второе обращение было направлено в «Райффайзен Банк Аваль», там оформили заявку на синхронизацию POS с ПК. С момента обращения и до сегодняшнего дня прошло более 50 дней. За этот период инженеры компании несколько раз обещали прийти, но так и не пришли. Терминалы остались неподключенными к ПК.
К слову, «Укрэксимбанк» и «Райффайзен Банк Аваль» используют POS-терминалы VeriFone Vx510. Исходя из нашего опыта, могу сказать, что аппараты весьма глючные и медленные, неоднократно перепрошивались.
Третий банк, в который мы обратились с подобным запросом – «ПриватБанк». На этот раз нам предложили терминалы Ingenico iCT220.
Дополнительно также обязательно заказывайте PIN-Pad для ввода PIN-кода – вещь весьма полезная, позволяет избегать случаев, когда покупателю приходится давать целый терминал для ввода PIN-кода.
Тестовый POS-терминал нам поставили с USB-кабелем, но как обычно, про синхронизацию с ПК забыли. Хотя спустя неделю, после обращения в техподдержку некий набор драйверов, библиотек и инструкций нам предоставили.
Далее изложена краткая инструкция с примерами по подключению POS-терминала к 1С 7.7 (1С 8).
Программное обеспечение POS-терминалов
Перед тем, как рассматривать интеграцию, следует немного поговорить про программное обеспечение POS-терминалов.
POS-терминалы имеют возможность прошивки/перепрошивки, чем собственно и пользуются банки, прошивая терминалы под свои нужды и особенности.
В данной публикации рассматриваются терминалы Ingenico с архитектурой Telium, поставляемые ПАО КБ «ПриватБанк». На терминалах используется программное обеспечение (приложение) T-Master TE7E от компании «Банкомсвязь» (Bankomzvjazok JSC). Обо всем по порядку.
В поставляемых терминалах используется система управления терминалами B-TMS.
B-TMS поддерживает следующие терминалы:
- Ingenico Unicpat32: I5100, I7910, I5310, I9500 и другие
- Ingenico Telium: EFTSmart, EFT930, CAD30 (и аналогичные модели SAGEM Monetel)
- Ingenico Telium2: ICT220, ICT250, IWL220, IWL250, IWL280, iPP320, iPP350, iPP480, iUN, iSC320, iSC350, iSC480
Сама же архитектура B-TMS (тип систем EFT POS TMS) не зависит от терминальной платформы, поэтому возможна интеграция с терминалами других известных брендов, таких как VeriFone, Hypercom, PAX и др. Это значит, что данная инструкция может быть применима и к ним.
Помимо системы управления, на терминале используется специальное «приложение» для EFT POS-терминалов, в нашем случае это финансовое приложение T-Master. Для разных процессинговых систем предназначены разные версии T-Master.
TE7E – для работы с процессинговыми системами Transware Online / Compass Plus, Ark Sys AS400. Перечень банков: ПАО КБ "ПриватБанк", ПАО "ПУМБ".
TE75 – для работы с процессинговыми системами SmartVista/БПЦ, TPII/ПрАТ "Український процесінговий центр" (UPC). Перечень банков: АО "УкрСиббанк", АО "Райффайзен Банк Аваль", ПАО АБ "ПИВДЕННЫЙ", ПАО "БАНК ВОСТОК", ПАО "ВиЭйБи Банк", ПАО "КРЕДОБАНК".
TE80 –для работы с процессинговой системой Way4/OpenWay. Перечень банков: АО "Ощадбанк", АО "Укрексимбанк", ПАО "Укрсоцбанк" (UniCredit Bank™).
TEiUN – для систем самообслуживания Online / Compass Plus, SmartVista/БПЦ, TPII/ПрАТ «Український процесінговий центр» (UPC), Way4/OpenWay. Перечень банков: ПАО КБ "ПриватБанк", ПАО "ПУМБ", АО "УкрСиббанк", АО "Райффайзен Банк Аваль", ПАО АБ "ПИВДЕННЫЙ", ПАО "БАНК ВОСТОК", ПАО "ВиЭйБи Банк", ПАО "КРЕДОБАНК", АО "Ощадбанк", АО "Укрексимбанк", ПАО "Укрсоцбанк" (UniCredit Bank™).
UPST – терминальное программное обеспечение для платформы Telium2, обеспечивающее работу с национальной платежной системой НСМЭП. Перечень банков: банки-члены НСМЭП.
Подключение POS-терминала Ingenico к 1С 7.7 (1С 8)
Итак, что мы имеем? Работа организована в сетевом режиме с использованием терминальных сессий (RDP).
Сервер:
- запущен на Windows Server 2003 R2 x64
- Intel Xeon E3-1245v2
- 16 Гб DDR3
- RAID на базе Seagate Constellation ES.2
- Intel PRO 100/1000
- 1С 7.7 версия SQL
Рабочие станции:
- работают на Windows 7 x64
- DATECS FP-T260 v.4.00
- Сканеры ШК – Datalogic Geron D310
Последовательность действий описана далее.
1. Подключаем POS-терминалы USB-кабелем к рабочей станции (ПК продавца).
USB-кабель от ПК нужно подключать к порту «USB SLAVE», а PIN-pad к порту «USB HOST».
При подключении Ingenico iCT220 в диспетчере устройств отобразится неизвестное USB-устройство. Для него нам необходимо установить драйвер виртуального COM-порта (Virtual COM-port). Установку можно выполнить как с помощью инсталлятора, так и указав драйвер вручную.
После успешной установки в диспетчере устройств у вас отобразится устройство SAGEM Telium COM-port. В настройках порта необходимо выставить скорость обмена 115200 (по-умолчанию).
В настройках RDP (терминала) у вас должна быть установлена опция подключения портов клиента (иначе у вас кассовый аппарат и сканер штрих-кода также не заработают). Запомните номер нового порта, он вам понадобится при подключении к POS-терминалу.
Обратите внимание! POS-терминалы Ingenico могут работать по 2 разным протоколам. Для того, чтобы узнать, какой именно протокол установлен в вашем аппарате – обратитесь в банк.
Если же вы владеете доступом к этим настройкам, зайдите в настройки протокола кассового совмещения: Меню конфигуратора – конфигурация – работа с кассой – протокол:
- 1) 4in1 – если будете использовать ECRCommX.ECRLibSgn
- 2) BPOS – если использовать ECRCommX.BPOS1Lib
В данной публикации рассматривается работа с библиотекой по протоколу BPOS.
На этом настройка рабочего места завершена.
2. Установка библиотеки ECRCommX на сервер
В архиве содержится 2 версии библиотеки ECRCommX.dll (v 1.7.6.4) – одна для х32, вторая для х64.
Версия х64 может быть установлена только на 64-битную ОС. Версия х32 может быть использована как в 32-битной, так и в 64-битной ОС.
64-битная версия библиотеки у нас не заработала, поэтому пришлось использовать 32-битную версию библиотеки ECRCommX.dll.
Данная компонента реализует высокоуровневый программный интерфейс взаимодействия между ПК на базе Windows (либо POS-системой на базе ОС Windows) и терминалами Ingenico EFT, при использовании соединения по USB или RS232 (COM).
Поддерживаемые ОС: Windows 8 (x86 / x64), Windows XP (x86 / x64), Windows 7 (x86/x64), Windows 2003, Windows 2008
Дополнительные требования:
- 1. Visual Studio C++ Redistributable 2005 – для библиотеки версии до 1.7.0.0
- 2. Visual Studio C++ Redistributable 2012 – начиная с версии 1.7.0.0
В библиотеке реализовано сразу несколько протоколов работы, среди которых ECRLibSgn и BPOS1Lib. Более подробная информация содержится в инструкции ECRCommX B-POS1 v3 и ECRCommX ECRLibSgn v1.6.9.4 (см. PDF во вложении).
Как установить ECRCommX.dll?
Копируем выбранную библиотеку ECRCommX.dll в любую папку на сервере. Рекомендую скопировать в рабочий каталог вашей базы либо каталог 1С.
Установка библиотеки ECRCommX.dll x32 в Windows x86
С правами Администратора выполните команду regsvr32 ECRCommX.dll. При успешном выполнении вы увидите сообщение.
Также вы можете выполнить bat-файл в папке с библиоткеой:
%windir%\System32\regsvr32 ECRCommX.dll
pause
Установка библиотеки ECRCommX.dll x64 в Windows x64
С правами Администратора выполните команду regsvr32 ECRCommX.dll. При успешном выполнении вы увидите сообщение.
Также вы можете выполнить bat-файл в папке с библиоткеой:
%windir%\syswow64\regsvr32 ECRCommX.dll
pause
Установка библиотеки ECRCommX.dll x32 в Windows x64
С правами Администратора выполните команду
C:\windows\syswow64\regsvr32 ECRCommX.dll
При успешном выполнении вы увидите сообщение.
Также вы можете выполнить bat-файл в папке с библиоткеой:
%windir%\syswow64\regsvr32 ECRCommX.dll
pause
Для того, чтобы проверить, успешно ли прошла установка библиотеки – запустите ECRLibSgn_Console_Test.exe, введите номер порта, скорость обмена и таймаут. После этого на экране вы увидите статус выполнения.
Библиотека не установлена:
Библиотека успешно установлена:
Команды BPOS (ActiveX ECRCommX.BPOS1Lib)
Т.к. команд много и всё описание на английском, наиболее важные команды и значения будут описаны ниже с кратким разъяснением. В качестве примера используется 1С 7.7, на 1С 8 синтаксис несколько отличается.
Подключение библиотеки ECRCommX в 1С 7.7
В случае с 1С лучше всего использовать конструкцию
Попытка
Код…
Иначе
Код…
КонецПопытки;
Таким образом, при обращении к ActiveX ECRCommX, вы сможете определить зарегистрирован ECRCommX или нет и для каждого из вариантов создать свой код-обработчик.
глPOSтерминал = СоздатьОбъект(“ECRCommX.BPOS1Lib”);
Ниже приведен краткий пример подключения.
Установка связи с терминалом
глPOSтерминал.CommOpen(1, 115200);
Где 1 – номер порта, на котором подключен POS-терминал. 115200 – скорость обмена.
Язык сообщений библиотеки
Библиотека предоставляет возможность выбрать язык выводимых ошибок.
глPOSтерминал.SetErrorLang(1);
Где 1 – код языка. Может принимать следующие значения: 0 – английский, 1 – украинский, 2 – русский.
Обработка ответов POS-терминала
Для того, чтобы правильно обработать ответ от терминала, необходимо проверить значение LastResult.
LastResult = глPOSтерминал.Lastresult();
Успешно
Если LastResult = 0 – операция успешна, можно отправлять команды на терминал.
Обработка…
Если LastResult = 2 – на терминале выполняются операции, дальнейшая работа в таком режиме невозможна. Вообще рекомендуется создать отдельную функцию, которую вы сможете вызывать по ходу работы с терминалом. Например, WaitPOSRespone(). Функция должна зацикливаться (делать паузу перед последующими командами) до тех пор, пока терминал выполняет операции. Не забудьте использовать тайм-аут, который будет прерывать цикл при превышении времени ожидания.
Если операция выполняется слишком долго, можно выполнить отмену операции, используя Cancel().
Пример функции WaitPOSRespone() приведен ниже.
Ошибка
Если LastResult = 1 – терминал вернул ошибку.
Узнать информацию об ошибке, вы можете, вызвав LastErrorCode и LastErrorDescription. Например:
Сообщить(“Код ошибки: ” + глPOSтерминал. LastErrorCode());
Сообщить(“Описание ошибки: ” + глPOSтерминал. LastErrorDescription ());
Если LastErrorCode = 1 – ошибка открытия СОМ-порта, например неправильный номер порта.
Если LastErrorCode = 2 – необходимо открыть СОМ-порт.
Если LastErrorCode = 3 – ошибка связи с терминалом.
Если LastErrorCode = 4 – терминал вернул ошибку, можно обработать ResponseCode:
- 1000 – общая ошибка;
- 1003 – журнал транзакций заполнен, нужно произвести обнуление (Z-отчет);
- 1004 – нет связи с хостом/банком;
- 1005 – закончилась бумага;
- 1006 – ошибка ключей;
Отправка POS-терминалу команды на оплату
Для передачи команды на оплату используется функция Purchase().
глPOSтерминал.Purchase(X,Y,Z);
Где X – сумма для оплаты в копейках (!). Например, 1 грн. 15 коп. – это 115 коп. При получении суммы из 1С достаточно умножить её на 100. Убедитесь, что 1С возвращает только 2 числа после запятой, иначе используйте округление.
Y – сумма скидки, в нашем случае используем 0.
Z – идентификатор продавца. Целое число, которое стартует с единицы. Если один терминал используют 2 продавца – можно указывать для них разные идентификаторы.
Например, для отправки команды на оплату 1,15 грн. нужно выполнить:
глPOSтерминал.Purchase(115, 0, 1);
После этого POS-терминал получит команду на оплату и будет ожидать чтение банковской карты.
На этом этапе нам нужно вызвать нашу стороннюю функцию WaitPOSRespone() и подождать, пока терминал возвращает LastResult = 2 (терминал занят).
Если LastResult = 0 – всё хорошо, если LastResult = 1 – возникла ошибка и её нужно обработать.
Если ответ успешный – нужно подтвердить операцию продаже, иначе она будет автоматически отменена по истечении тайм-аута.
глPOSтерминал.Confirm();
После этого опять вызываем WaitPOSRespone() и опять дожидаемся обработки нашей команды.
Существует также команда Cancel(), которая отменяет проведение операции. В принципе, если вы не воспользуетесь Confirm(), терминал по истечении тайм-аута ожидания сам отменит операцию. Хотя эту функцию можно использовать в других случаях, например, когда терминал слишком долго обрабатывает запрос (LastResult = 2) и может быть интегрирована в функцию WaitPOSRespone().
Между глPOSтерминал.Purchase() => WaitPOSRespone() и глPOSтерминал.Confirm() уже можно получить параметры прочитанной карты:
CardPAN = глPOSтерминал.PAN; // номера карты в формате 1234хххххх5678
CardHolder = глPOSтерминал.CardHolder; // владелец карты IVAN/PETROV
CardSignVerif = глPOSтерминал.SignVerif; // необходимость подписи клиента 0 (нет) или 1 (да)
CardIssuerName = глPOSтерминал.IssuerName; // наименование банка, выпустившего карту
PAN, CardHolder, IssuerName, SignVerif, RRN являются переменными (null-terminated string), поэтому обращаться к ним нужно как к переменным.
После успешного выполнения Confirm() вы можете получить идентификатор транзакции RRN:
CardRRN = глPOSтерминал.RRN;
Если вам нужно идентифицировать тип карты – используйте IdentifyCard().
Если вам нужно изменить сумму к оплате – не обязательно нужно отменять Purchase(), достаточно воспользоваться функцией CorrectTransaction(), которая позволяет изменить сумму к оплате.
Системные/служебные/информационные сообщения
В протоколе BPOS при использовании Purchase() предусматриваются функции LastStatMsgCode() и LastStatMsgDescription(). Первая функция возвращает код сообщения, вторая – её описание в виде текста.
Эти 2 функции могут бить использованы при LastResult = 2, т.е. когда POS-терминал занят обработкой запроса.
Их можно использовать в нашей сторонней функции WaitPOSRespone(), например:
Состояние(“Состояние: ” + глPOSтерминал.LastMsgDescription());
Таким образом, пока POS-терминал занят обработкой, мы в строке состояния будем видеть текущий статус:
- LastStatMsgCode = 0 – сообщений нет
- LastStatMsgCode = 1 – прочитана карта клиента
- LastStatMsgCode = 2 – карта с чипом, поэтому нужно использовать чип
- LastStatMsgCode = 3 – процесс авторизации
- LastStatMsgCode = 4 – клиент должен ввести PIN-код.
Как правило, при LastStatMsgCode() = 4 параметр SignVerif (глPOSтерминал.SignVerif) принимает значение 0, т.е. если клиент ввел PIN-код – подписывать чек не нужно.
Возврат товара, отмена продажи
Refund() – используется для возврата денежных средств при возврате клиентом товара. Может быть использована в любое время.
Void() – позволяет отменить операцию продажи и возврата. Может быть выполнена только до закрытия смены.
Z-отчёт, X-отчёт, отчёт за день
Settlement() отправляет команду выполнения Z-отчёта, что приводит к закрытию смены и очистке журнала.
PrintLastSettleCopy() – печать копии последнего Z-отчёта.
PrintBatchTotals() – печатает X-отчет (если есть операции), без обнуления журнала.
PrintBatchJournal() – печатает отчёт по операциям за день.
GetBatchTotals() – позволяет получить X-отчет по операциям в электронном виде, например для внесения в бухгалтерскую базу и т.д.
Эти функции могут быть, как интегрированы в «закрытие смены», так и вынесены в качестве отдельного служебного меню.
Краткий черновой пример использования:
Также в служебном меню могут быть использованы дополнительные функции:
PosGetInfo() – возвращает информацию о терминале
CheckConnection() – осуществляет на терминале проверку соединения с процессинговым центром
Возможные вопросы
1. MerchantID – являет собой идентификатор продавца, однако его не стоить путать с ID-кассира. Есть предприятия, которые поделены на части (уклонение от уплаты налогов) и для продажи разных товаров продажа осуществляется с разных предприятий. Например, продажа алкогольных изделий оформлена на ПП Пупкин, а продажа косметики – на ПП Иванов. MerchantID в этом случае позволяет использовать 1 терминал для всех зарегистрированных фирм. В нашем примере ПП Пупкин будет иметь MerchantID = 1, а для ПП Иванов MerchantID = 2. Если же у вас всё зарегистрировано на 1 предприятие, то MerchantID равен 1.
2. Если при тестировании вы будете использовать одну и ту же банковскую карту – на терминале будет отображаться запрос на повторное проведение транзакции – это нормально, нажмите зеленую кнопку. При использовании разных карт запрос не отображается.
3. При тестировании с одной и той же картой, в зависимости от настроек безопасности терминала, может быть установлено ограничение на количество операций по одной карте, либо же будет осуществляться дополнительный запрос PIN-кода.
4. Если за день не было операций – терминал может не печатать чек. Зависит от настроек, некоторые банки так экономят бумагу.
5. При неудачной операции, терминал может не печатать чек отказа. Зависит от настроек, некоторые банки так экономят бумагу. Если у вас такой чек не печатается – обратитесь в банк для изменения настроек. В будущем это позволит вам сберечь нервы при выяснении вопросов с клиентом.
6. Терминалы Ingenico могут администрироваться банком удаленно, т.е. сотрудникам не обязательно приходить для настройки терминала.
7. Используйте терминалы с GPRS – проводов меньше, да и терминал не зависит от вашего Интернет-соединения.
8. Что делать, когда возникает ошибка "Відхилено... Код авторизації: DECLIN... Код 96. Криптогр. помилка або збій системи"? Как правило, эта ошибка возникает при чтении магнитных карт (безчиповых). Нужно обратиться в службу поддержки банка, после чего, через меню терминала загрузить новые параметры. Если после обновления параметров ошибка не исчезнет - менять терминал.
9. Бывают случаи, когда с клиента деньги списывает, при этом терминал выдает чек "Анульовано... Код авторизації: CANCEL" и деньги не зачисляются. Для того, чтобы средства вернулись клиенту, необходимо выполнить Z-баланс (Z-отчет) в меню терминала. В 80% случаев, проблема возникает по причине плохой связи терминала с процессинговым центром (эквайрингом), например в терминалах с GPRS. Также ошибка может возникать при проблемах с кабелем питания терминала, либо с картой клиента.
10. PIN-Pad привязывается к конкретному терминалу! Т.е. просто переставить PIN-Pad на другой терминал не получится, необходимо, чтобы банк внес соответстующие изменения в настройки. Связано это с тем, что PIN-Pad имеет систему защиты, для предотвращения кражи PIN-кода.
Файлы для скачивания
Пакет «Visual C++ для Visual Studio» вы можете скачать на сайте Microsoft.
Библиотека ECRCommX
Макросы для тестирования BPOS1
Описание протокола ECRCommX B-POS1 v3.0.3 (в формате PDF)
Посмотреть онлайн файл: ecrcommx-b-pos1_v3_0_3.pdf
Описание протокола ECRCommX ECRLibSgn v1.6.9.4 (в формате PDF)
Посмотреть онлайн файл: ecrcommx.ecrlibsgn_v1.6.9.4.pdf
ПО для тестирования ECRLibSgn Test
Макросы для тестирования ECRLibSgn
Консоль для тестирования ECRLibSgn Console Test
Драйвер SAGEM Telium USB для Linux
Драйвер SAGEM Telium USB для ручной установки
Драйвер SAGEM Telium USB для Windows 7
Драйвер SAGEM Telium USB для Windows 8
Драйвер SAGEM Telium USB для Windows XP
Список всех доступных функций и параметров ECRCommX для протокола B-POS
Class BPOS1Lib; // BPOS1Lib Class
GUID={98333CF4-45FE-4996-B576-793BD1C08EA7};
function QueryInterface(riid:GUID; out ppvObj:void);
function AddRef: UI4;
function Release: UI4;
function GetTypeInfoCount(out pctinfo:UINT);
function GetTypeInfo(itinfo:UINT; lcid:UI4; out pptinfo:void);
function GetIDsOfNames(riid:GUID; rgszNames:I1; cNames:UINT; lcid:UI4; out rgdispid:I4);
function Invoke(dispidMember:I4; riid:GUID; lcid:UI4; wFlags:UI2; pdispparams:DISPPARAMS; out pvarResult:variant; out pexcepinfo:EXCEPINFO; out puArgErr:UINT);
function CommOpen(bPort:UI1; lBaudRate:I4);
function CommOpenTCP(bsIP:BSTR; bsPort:BSTR);
function CommOpenAuto(lBaudRate:I4);
function CommClose;
function Purchase(ulAmount:UI4; ulAddAmount:UI4; bMerchIdx:UI1);
function Refund(ulAmount:UI4; ulAddAmount:UI4; bMerchIdx:UI1; bsRRN:BSTR);
function Void(ulInvoiceNum:UI4; bMerchIdx:UI1);
function Settlement(bMerchIdx:UI1);
function PrintBatchTotals(bMerchIdx:UI1);
function Confirm;
function Cancel;
property-get LastResult: UI1;
property-get LastErrorCode: UI1;
property-get LastErrorDescription: BSTR;
property-get LastStatMsgCode: UI1;
property-get LastStatMsgDescription: BSTR;
property-get ResponseCode: UI4;
property-get pan: BSTR;
property-get DateTime: BSTR;
property-get TerminalID: BSTR;
property-get MerchantID: BSTR;
property-get AuthCode: BSTR;
property-get ExpDate: BSTR;
property-get CardHolder: BSTR;
property-get IssuerName: BSTR;
property-get InvoiceNum: UI4;
property-get rrn: BSTR;
property-get TotalsDebitAmt: UI4;
property-get TotalsDebitNum: UI4;
property-get TotalsCreditAmt: UI4;
property-get TotalsCreditNum: UI4;
property-get TotalsCancelledAmt: UI4;
property-get TotalsCancelledNum: UI4;
property-get SignVerif: UI1;
property-get TxnNum: UI4;
function GetTxnNum;
function GetTxnDataByOrder(ulOrderNum:UI4);
function GetTxnDataByInv(ulInvoiceNum:UI4; bMerchIdx:UI1);
function GetBatchTotals(bMerchIdx:UI1);
function CheckConnection(bMerchIdx:UI1);
function PrintLastSettleCopy(bMerchIdx:UI1);
function PrintBatchJournal(bMerchIdx:UI1);
property-get Amount: UI4;
property-get AddAmount: UI4;
function ReqCurrReceipt;
property-get Receipt: BSTR;
property-get emvAID: BSTR;
property-get EntryMode: UI1;
property-get TxnType: UI1;
function ReqReceiptByInv(ulInvoiceNum:UI4; bMerchIdx:UI1);
function SetErrorLang(bErrLanguage:UI1);
function SetControlMode(isCtrlMode:bool);
property-get TermStatus: UI1;
function ReadKey(bTimeOut:UI1);
function DisplayText(bBeep:UI1);
function SetLine(bRow:UI1; bCol:UI1; bsText:BSTR; bInvert:UI1);
property-get Key: UI1;
function ExchangeStatuses(bECRStatus:UI1);
function Completion(bMerchIdx:UI1; ulAmount:UI4; bsRRN:BSTR; ulInvoiceNum:UI4);
function ReadCard;
property-get track3: BSTR;
function balance(bMerchIdx:UI1; bsCurrCode:BSTR; bAccNumber:UI1);
function Deposit(bMerchIdx:UI1; ulAmount:UI4; bsCurrCode:BSTR; bAccNumber:UI1);
property-get TrnStatus: UI1;
property-get Currency: BSTR;
function PurchaseService(bMerchIdx:UI1; ulAmount:UI4; bsServiceParams:BSTR);
property-get TrnBatchNum: UI4;
function IdentifyCard(bMerchIdx:UI1; bsCurrCode:BSTR; bAccNumber:UI1);
property-get RNK: BSTR;
property-get CurrencyCode: BSTR;
function PosGetInfo;
function POSExTransaction;
property-get Adddata: BSTR;
property-get TerminalInfo: BSTR;
property-get DiscountName: BSTR;
property-get DiscountAttribute: UI4;
property-get ECRDataTM: BSTR;
property-get LibraryVersion: BSTR;
function SelectApp(bsAppName:BSTR; ulAppIdx:UI4);
function CloseApp;
function StartScenario(ulScenarioID:UI4; bsScenariodata:BSTR);
property-get Scenariodata: BSTR;
function SetExtraPrintData(bsExtraPrintdata:BSTR);
function useLogging(bLoggingLevel:UI1; bsFilePath:BSTR);
function SendFile(bsFullPath:BSTR; bECRDataType:UI1; bECRCommand:UI1);
function SetScreen(ulScreenNumber:UI4);
function CorrectTransaction(ulAmount:UI4; ulAddAmount:UI4);