Блог

 
 

§188 Интеграция 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».

Интеграция POS-терминалов Ingenico с торговым программным обеспечением. На примере Ingenico iCT220/250 + 1С 7.7 (1С 8)

При подключении 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
Интеграция POS-терминалов Ingenico с торговым программным обеспечением. На примере Ingenico iCT220/250 + 1С 7.7 (1С 8)

В данной публикации рассматривается работа с библиотекой по протоколу 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-терминалов Ingenico с торговым программным обеспечением. На примере Ingenico iCT220/250 + 1С 7.7 (1С 8)

Установка связи с терминалом

гл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() приведен ниже.

Интеграция POS-терминалов Ingenico с торговым программным обеспечением. На примере Ingenico iCT220/250 + 1С 7.7 (1С 8)
Ошибка

Если 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

Файл: activex_ecrcommx.dll_v1.7.6.4.rar [1,13 Mb] (cкачиваний: 527)

 

Макросы для тестирования BPOS1

Файл: ecr_bpos1.rar [37,48 Kb] (cкачиваний: 348)

 

Описание протокола ECRCommX B-POS1 v3.0.3 (в формате PDF)

Файл: ecrcommx-b-pos1_v3_0_3.pdf [388,08 Kb] (cкачиваний: 394)

 

Описание протокола ECRCommX ECRLibSgn v1.6.9.4 (в формате PDF)

Файл: ecrcommx.ecrlibsgn_v1.6.9.4.pdf [321,66 Kb] (cкачиваний: 286)

 

ПО для тестирования ECRLibSgn Test

Файл: ecrlibsgn-test.rar [11,57 Kb] (cкачиваний: 408)

 

Макросы для тестирования ECRLibSgn

Файл: ecrlibsgn.rar [28,54 Kb] (cкачиваний: 201)

 

Консоль для тестирования ECRLibSgn Console Test

Файл: ecrlibsgn_console_test.rar [73,51 Kb] (cкачиваний: 350)

 

Драйвер SAGEM Telium USB для Linux

Файл: telium-usb-driverslinux.rar [1,22 Kb] (cкачиваний: 168)

 

Драйвер SAGEM Telium USB для ручной установки

Файл: telium-usb-driversmanual.zip [16,17 Kb] (cкачиваний: 348)

 

Драйвер SAGEM Telium USB для Windows 7

Файл: telium-usb-driverswindows7.rar [2,65 Mb] (cкачиваний: 544)

 

Драйвер SAGEM Telium USB для Windows 8

Файл: telium-usb-driverswindows8.rar [6,58 Kb] (cкачиваний: 332)

 

Драйвер SAGEM Telium USB для Windows XP

Файл: telium-usb-driverswindowsxp.zip [698,74 Kb] (cкачиваний: 300)

Список всех доступных функций и параметров 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);



Рекомендуем также
  • Интеграция платежных терминалов Ingenico с бизнес-приложениями на платформа ... » Чуть более года назад мы уже писали про интеграцию POS-терминалов с торговым программным обеспечением на примере популярных терминалов Ingenico iCT220/250 и программного обеспечения 1С 7.7 (1С 8). В ...

  • Быстрый вывод средств AdSense на карту любого украинского банка. На примере ... » Те, кто пользуется системой Google AdSense, вероятно, должны уже знать о вводе новой платёжной системы. Все очень долго ждали, когда компания Google введёт оплату с помощью банковского перевода в ...

  • Mikrotik Advanced Failover: автоматическое переключение между основным кана ... » В рамках вводной публикации, опубликованной ранее, были изложены основные моменты подключения 3G-модема к маршрутизатору Mikrotik, на примере Huawei E173 и RB952Ui-2nD (hAP). Также мы рассмотрели ...

  • К вниманию продавцов: новый вид мошенничества на Slando (OLX). Перевод дене ... » Сегодня мы расскажем вам про новый вид мошенничества, который нацелен в первую очередь на ПРОДАВЦОВ, которые продают свои товары на Slando (OLX) и им подобных досках объявлений. Аукционы на Aukro ...

  • Прошивка акционного роутера от Киевстар TL-741ND » В связи с тем, что возникает много вопросов, по поводу перепрошивки роутеров от КС на заводскую прошивку, выскажу своё личное мнение. Для начала, нужно разобраться с самой сутью услуги ...

  • Обновление прошивки Trimax TR-2012HD до версии 1.011 » Вышла долгожданная обновленная прошивка для ресивера Trimax. Обновление уже доступно из эфира. ...

  • Assistant AP-102: прошивка, обновление и восстановление » На днях мне потребовалось перепрошить свой Assistant AP-102, однако официальная инструкция, размещенная на сайте Assistant является весьма упрощенной, как мне показалось. У некоторых пользователей в ...


  • Заметка опубликована 13.02.15. Со времени публикации её просмотрели 37805 раз. Если вам понравилась заметка «Интеграция POS-терминалов Ingenico с торговым программным обеспечением. На примере Ingenico iCT220/250 + 1С 7.7 (1С 8)», вы можете поделиться ею со своими друзьями. Всё, что требуется сделать - нажать на одну (или несколько) из кнопок чуть ниже.



     

    Комментарии к заметке

    С момента публикации к заметке оставлено 32 комментариев. Вы можете присоединиться к обсуждению, для этого воспользуйтесь формой ниже. После проверки ваше сообщение появится на сайте. Убедительная просьба: соблюдайте правила.

    #32 | Автор: DmitryAVET | 25.10.16 | from Ukraine
    Вы LastResult обрабатываете? Там же есть ответ, что операция не прошла, после чего завершаете цикл, к тому же есть отдельная команда Cancel().


    #31 | Автор: Peter | 25.10.16 | from Ukraine
    Добрый день!
    Столкнулся с ситуацией (пока провожу тесты).Если у клиента отсутсвуют средства на счету терминал оклоняет оплату и как правильно ее закрыть (неудавшуюся транзакцию). При попытке провести следующую оплату (деньги на счету есть)терминал спрашивает - Продолжить транзакцию - Отмена (или при Продолжить понимается новая транзакция?) При отмене транзация закрывается и оплатить карточкой уже невозможно.Возможно сумбурно, но думаю поймете.


    #30 | Автор: Валентин | 19.10.16 | from Ukraine Rivne
    Валерий, насколько я понял, вы интегрировали в свою систему приватбанковский терминал?

    Если так - очень хотелось бы пообщаться с вами лично, есть идея интересного проекта на этой основе. Мой скайп val.budkin.


    #29 | Автор: Валера | 13.07.16 | from Ukraine
    Подведем итог с разрешения администрации.
    Проблема с ошибкой "Карта не обслуживается" возникает в случае, если на терминале активирована программа "Бонус +" от ПриватБанка. Решается заменой кода мечанта с 1 на 0(ноль).
    гпPOSТерминал.Purchase(100,0,0);
    После этого все работает отлично, со всеми картами.
    Спасибо администрации ресурса за полезную информацию и помощь в работе с возникшими вопросами.


    #28 | Автор: Валера | 08.07.16 | from Ukraine
    Причина была в следующем:
    1. Не была активирована работа по ЮСБ (как и написано)
    2. Вместо BPOS стоял 4in1
    Это все решили с банком.
    Теперь проблема как у (#16) - "Карта не обслуживается" что чип, что лента, видимо что-то упущено в процессе
    Буду разбираться.


    #27 | Автор: DmitryAVET | 07.07.16 | from Ukraine
    Банк должен активировать работу по USB/COM в настройках терминала и установить BPOS, иначе работать не будет. При подключении кабеля в диспетчере устройств SAGEM Telium отображается?


    #26 | Автор: Валера | 06.07.16 | from Ukraine
    Если бы я знал.. Есть возможность проверить самому, или это надо банк трусить?


    #25 | Автор: DmitryAVET | 06.07.16 | from Ukraine
    BPOS в терминале самом включен?


    #24 | Автор: Валера | 05.07.16 | from Ukraine
    Тоже столкнулся с непонятной ерундой. На тестовом терминале - все работает, оплата проходит. Все супер. Принесли новый рабочий терминал, поставили на кассу. И тишина... Причем до присвоение терминалу какого-то кода (мерчанта банковского) терминал с компом связывался нормально. Не проходит даже CheckConnection(). Ошибка 2 - СОМ порт не открыт. Терминал даже не загорается. Подскажите куда копать?


    #23 | Автор: DmitryAVET | 30.06.16 | from Ukraine
    Зачем файлообменник? Есть в публикации целый раздел "Файлы для скачивания", в котором все файлы в виде вложений.


    #22 | Автор: Сергей | 30.06.16 | from Russian Federation Voronezh
    Можете залить на файлообменник драйвер виртуального COM-порта для Windows? Заранее спасибо.


    #21 | Автор: yura | 25.06.16 | from Ukraine Zhytomyr
    Добрый день!
    Пытался получить Сумму скидки (Приват Б+), пишет "Тип переменой не поддерживается".

    гпPOSТерминал.Purchase(100,0,0);
    WaitPOSRespone();
    сумма = гпPOSТерминал.AddAmount;

    ставил после гпPOSТерминал.Confirm(); аналогично.

    Где моя ошибка?


    #20 | Автор: DmitryAVET | 17.04.16 | from Ukraine
    Для очистки делается Z-отчет, разве нет?


    #19 | Автор: Настя | 17.04.16 | from Ukraine
    Добрый день! В терминале постоянно пишет файл транзакций заполнен! Подскажите что делать?


    #18 | Автор: DmitryAVET | 04.04.16 | from Ukraine
    Менять SIM на другого оператора, как вариант. Вообще такими вопросами занимается техподдержка банка.


    #17 | Автор: Василий | 01.04.16 | from Ukraine Kiev
    Добрый день подскажите пжл. при работе терминала по GPRS связи часто летит модем, то бишь при попытке соединени пишет ошибка ДЖПР ДЖСМ и не находит симку, как выличить? СПС


    #16 | Автор: Алексей | 20.01.16 | from Ukraine Kiev
    Проблема такая, после команды глПосТерминал.Purchase(СуммаКОплате, 0, 1);
    Терминал просит терминал просит карту, после проведения любой карты возвращает "Карта не обслуговується!", причем если просто карту провести то дает выбрать счет основной либо бонусный. Не сталкивались? Может подскажите как это побороть?


    #15 | Автор: DmitryAVET | 05.01.16 | from Ukraine
    Насколько я знаю, можно работать и по локальной сети с B-POS. Изначально мы так и предполагали - использовать 1 терминал на 2 соседние кассы. Для этого в настройках ПО указывается IP терминала в сети и порт, командой CommOpenTCP(IP, Port), например CommOpenTCP(192.168.1.20, 8085). Далее уже работаете с привычным набором команд.

    Но тут проблема в том, что терминал необходимо подключать к локальной сети предприятия и попросить банк настроить все это дело. Клиент не имеет доступа к настройкам терминала.


    #14 | Автор: Александр | 04.01.16 | from Ukraine
    Здравствуйте, есть функция function CommOpenTCP, посмел предположить, что с терминалом можно общаться по Ethernet, но уже все перерыл и не нашел куда и к чему эта функция, есть у кого-то опыт?


    #13 | Автор: DmitryAVET | 21.11.15 | from Ukraine
    Добрый день! Да, есть возможность работать с Бонус+, если это необходимо. В документации достаточно информации. Merchant нужен для тех случаев, когда на фирме несколько ФОПов оформлено, т.е. терминал можно запрограммировать так, что первый мерчант будет ФОП Пупкин, а второй, например, ФОП Иванов.

    В остальных случаях достаточно единицу всегда отдавать.


    #12 | Автор: Константин | 28.10.15 | from Ukraine Nikolaev
    Добрый день

    Есть особенности при обработке карточек с Бонус+ или VIP-клуб?
    Как в данном случае выбирается счет для оплаты: основной, бонусный?
    Merchant в процедуры оплаты можно передавать всегда =1?


    #11 | Автор: Поддержка Ощадбанка | 13.08.15 | from Ukraine
    Автор молодець. Статья просто супер. Ваше описание процесса это незаменимый помощник для тех, у кого интеграция терминала это задача от руководства.


    #10 | Автор: глюк | 06.05.15 | from Ukraine Kharkov
    Я бы даже уточнил, что используются настройки не терминала, а терминального софта Банкомсвязи.
    Для программиста на стороне ПК оба "протокола" ECRLibSgn и BPOS1 - это обычные API, реализованные через подключаемую DLL-ку. А вот протокол(ы) обмена через СОМ-порт (эмулированный переходником USB-UART, встроенным в терминал Ingenico) между DLL-кой и терминальным софтом Банкомсвязи - это уже ноу-хау Банкомсвязи.


    #9 | Автор: DmitryAVET | 05.05.15 | from Ukraine Uzhhorod
    Документа называется "ECRCommX for connecting to Ingenico POS-terminals using B-POS1 protocol", хотя далее по тексту "The component realizes a high level application interface between Windows personal computer (PC) or Windows based POS systems for interaction with Ingenico EFT POS terminals using ECR protocol by RS232 or USB connections."

    Не в этом суть. Суть в том, что при использовании ECRLibSgn и BPOS1, нужно использовать соответствующие настройки в терминале.

    Зачем два апи - понятия не имею. Чисто субъективно, BPOS более функциональный, да и документация побольше. У ПриватБанка по-умолчанию BPOS ставят.


    #8 | Автор: глюк | 05.05.15 | from Ukraine Kharkov
    Давайте все же придерживаться правильной терминологии. 4in1 и BPOS - это не "протоколы", а API, разработанные программистами Банкомсвязи для обмена данными между прикладным софтом на ПК и ПОС-терминальным софтом Банкомсвязи. Обмен данными идет через аппаратный переходник USB-UART, встроенный в терминалы Ingenico. Кстати интересно, зачем программистам Банкомсвязи понадобилось разрабатывать целых два API?


    #7 | Автор: DmitryAVET | 04.05.15 | from Ukraine Uzhhorod
    Протоколов 2:

    1) 4in1 – если будете использовать ECRCommX.ECRLibSgn
    2) BPOS – если использовать ECRCommX.BPOS1Lib

    Просите у банка BPOS, либо подключайте ECRCommX.ECRLibSgn и следуйте соответствующей документации. В этой публикации рассматривается протокол BPOS.


    #6 | Автор: Олег Владимирович | 04.05.15 | from Ukraine Nikolaev
    Оказалось что все таки проблема была в банке требовалась у них включить эту возможность
    Хотя просил я у них протокол Bpos включили мне 4in1
    Есть ли разница какой использовать?Если что снова буду тормошить банк?


    #5 | Автор: DmitryAVET | 03.05.15 | from Ukraine Uzhhorod
    Олег Владимирович, они подключаются как эмулятор USB-COM. Т.е. при подключении к ПК, если USB активирован в настройках терминала, отобразится SAGEM Telium COM.

    Если он не отображается в диспетчере - значит его нужно активировать в настройках терминала. Это делает банк. Также нужно выбрать протокол 4 in 1 (BPOS).

    Если COM-недоступен, то LastErrorCode = 1 (error opening COM port). Пишите код согласно документации, там достаточно команд для обработки кода ошибки и вывода соответствующей информации.


    #4 | Автор: Олег Владимирович | 03.05.15 | from Ukraine Nikolaev
    У меня подозрение что порт не открывается так как такой же результат при указании любого порта.
    Возможно ли что приватбанк закрыл в терменали работу через usb. техподдержка банка молчит


    #3 | Автор: DmitryAVET | 30.04.15 | from Ukraine Uzhhorod
    Олег Владимирович, при получении 2 нужно зацикливать и ждать, пока возвращает 2.

    Код 2 = выполняется обработка

    Geniusbsd,

    LastStatMsgCode чем не вариант? 15-16 страницы документации по B-POS:
    9 – waiting for card
    1 – card was read


    Представьтесь:*
    E-Mail (не публикуется):
     
     
     
     
     
     
    Я ознакомлен(а) и принимаю правила комментирования.
    Включите эту картинку для отображения кода безопасностиНе читабельно? Обновите код!




    Последние заметки в блоге

     
    11.11
    2016
    Скидки в Rozetka.com.ua: ноябрь 2016, промокод ко Дню Шопинга 11.11: Итак, друзья, продолжаем традицию с промокодами. Для тех, кто не... [ Читать ]
    03.11
    2016
    Mikrotik обновил часть своих устройств: новые процессоры и радиомодули для cAP, mAP, OmniTIK 5, OmniTIK 5 PoE, QRT 2, SXT 2, DynaDish 5, SXT HG5 ac, SXT 5 ac, SXT SA5 ac и SXT Lite5 ac: Компания Mikrotik анонсировала большое обновление для своих устройств. Чуть ранее... [ Читать ]
    03.11
    2016
    Обзор маршрутизатора Mikrotik hEX rev.3 (RB750Gr3): аппаратный IPSec, мощный двуядерный процессор, 256 Мб оперативки и поддержка Dude Server: Компания Mikrotik анонсировала обновление маршрутизатора hEX до 3-ей ревизии– RB750Gr3.... [ Читать ]
    03.11
    2016
    Обзор Ubiquiti Rocket 5ac Prism: оптимальное решение для базовых станций и линков PTP по соотношению цена/качество: Год назад, на конференции Ubiquiti NEXT 2015, проходящей в Лас-Вегасе,... [ Читать ]
    01.11
    2016
    Сравнительный обзор EdgePoint EP-R6, EP-R8 и EP-S16: упрощаем коммутацию внутри сети: 12 октября в Лас-Вегасе на ежегодной конференции NEXT 2015 Роберт... [ Читать ]

    Самое популярное

     

    На правах рекламы ↓

     

    Навигация по тегам

     
    802.11ac, 802.11n, Android, DVB-T2, EdgeRouter, Google, hAP, hAP lite, Mikrotik, Parom.TV, RB951Ui-2HnD, RouterBOARD, RouterOS, Rozetka, rozetka.com.ua, Strong, Strong 8500, Strong SRT 8500, Trimax, Ubiquiti, UBNT, UniFi, Wi-Fi, Winbox, антенна, маршрутизатор, настройка, обзор, обновление, онлайн ТВ, планшет, промо, промо-код, прошивка, ресивер, роутер, сайт, скидки, тест, точка доступа

    Показать все теги