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

13 февраль 2015 172 392 60

Немного предыстории

Компания, в которой я работаю, вот уже более 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

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

 

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

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

 

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

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

Посмотреть онлайн файл: ecrcommx-b-pos1_v3_0_3.pdf

 

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

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

Посмотреть онлайн файл: ecrcommx.ecrlibsgn_v1.6.9.4.pdf

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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


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

Интернет-магазин ntools.com.ua

Комментарии:

Добавить
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
  1. Мирослав
    Мирослав Гости 11 сентября 2022 11:05
    + 0 -
    Доброго дня.
    Чи є можливість при відкритті зміни прочитати список мерчантів для перевірки відповідності з обліковою системою ?
  2. DmitryAVET
    DmitryAVET Создатель 17 марта 2022 20:04
    + -1 -
    Идентификатор мерча начинается с 0, если 1 не запрограммирована, значит будет ошибка.
  3. Гость Дмитрий
    Гость Дмитрий Гости 3 марта 2022 09:13
    + -1 -
    После успешной оплаты спрашивает, печатать ли чек. Как задать всегда печатать или не печатать?
  4. Гость Дмитрий
    Гость Дмитрий Гости 3 марта 2022 09:12
    + 0 -
    Когда в Purchase указываю MerchId = 1, говорит "Не принята". Если MerchId = 0, все в порядке.
    Кто объяснит?
  5. Вячеслав
    Вячеслав Гости 10 февраля 2022 11:03
    + -1 -
    Доброго дня. Виникло запитання. Ingenico підключили до ноутбука з операційною системою Linux Mint. Пристрій оприділився на /dev/ACM0. Не зрозуміло у якому форматі передавати параметр ф-цію CommOpen
  6. Гость Андрей
    Гость Андрей Гости 19 января 2022 12:33
    + 0 -
    Добрый день.

    Подскажите как получить название платежной системы (Visa, MasterCard)
    Не нашел этого в документации к B-POS1 protocol
  7. Евгений
    Евгений Гости 11 января 2022 23:54
    + -1 -
    Подскажите, пожалуйста. Влияет ли версия фин. "приложения" T-Master на методы общения программного обеспечения с терминалом по протоколу BPOS1?
    Например, мне озвучили в одной компании (называть не буду), что их ПО может работать по протоколу BPOS1, но только определённых банков, и с терминалами ощадбанка работать не будет (потому что BPOS1 у них не такой, как надо, и связано это с тем, что используют другой процессинговый сервис)
  8. Nikoly
    Nikoly Посетители 25 октября 2021 19:35
    + -1 -
    Добрий вечір.
    Хелп МЫ/
    Підключив банківський термінал Ingenico ПРИВАТА.
    Вроді все ОК.
    Але не вертає номер транзакції
    Текст оплати на 1с В7.7

    glTeminal.Purchase(SummaOplati*100,0,1);
    Если WaitPOSResponce()< 0 Тогда
    ....
    КонецЕсли;
    ДержательКарты=glTerminal.CardHolder;
    НазваниеКарты =glTerminal.IssuerName;
    НомерСчетаКл =glTeminal.PAN;
    //Все нормально НомерСчетаКл, НазваниеКарты, ДержательКарты все вертає
    glTerminal.Confirm(); //Підтвердження проходе
    //Чек розпечатує на терміналі

    КодАвторизації=glTerminal.AuthCode;
    Транзакция=glTerminal.RRN;
    Сообщить(" Транзакция -"+Транзакция+" Код авторизації-"+КодАвторизації);
    //І значення Транзакції і КодАвторизації пусті.
    Підскажіть в чому може бути проблема?



    Если WaitPOSResponce()< 0 Тогда
    ....
    КонецЕсли;
    1. Victor
      Victor Гости 4 января 2022 13:54
      + -1 -
      Перенести чтение кодов перед Confirm
  9. Микола
    Микола Гости 25 октября 2021 17:33
    + -1 -
    Добрый вечер. подключаю терминал Привата Ingenico . Все вроде получилось. Проплата проходит. НазваниеКарти =глПОСТерминал.IssuerName; НомерСчетаКл=лПОСТерминал.PAN;ВласникКарти=глПОСТерминал.CardHolder;
    получаю. А вот после подтвежрдения оплаты, глПОСТерминал.Confirm();, получить номер транзакции не могу.
    Возвращает пустое значение.
    АдиТерминала=глПОСТерминал.TerminalID;
    КодАвторизації=глПОСТерминал.AuthCode;
    Транзакция=глПОСТерминал.RRN;
    //++++++++++++++++++++++++++++++++++++++++++++++++
    Функция Продажа()
    Удача=1;
    Если ПустоеЗначение(Сумма)=1 Тогда
    Сообщить("Значення суми нульове. Задайте суму");
    Удача=0;
    Возврат Удача;

    КонецЕсли;

    Если глПОСТерминал<>0 Тогда
    Если Подключить()=0 Тогда
    Предупреждение("Обнуліть СОМ порт і попробуйте підключитись знову");
    Удача=0;
    Возврат Удача;
    КонецЕсли;
    глПОСТерминал.Purchase(Сумма*100,0,1);
    Если WaitPOSResponce()< 0 Тогда
    Предупреждение ("Платіж не пройшов через ПОС термінал !!!");
    Предупреждение("Код помилки -"+глПОСТерминал.LastErrorCode(),"!" );
    Предупреждение(глПОСТерминал.LastErrorDescription(),"!");
    Удача=0;
    глПОСТерминал.CommClose();
    КонецЕсли;
    НомерСчетаКл =глПОСТерминал.PAN;
    ВласникКарти=глПОСТерминал.CardHolder;
    НазваниеКарти =глПОСТерминал.IssuerName;
    глПОСТерминал.Confirm();
    Если WaitPOSResponce()< 0 Тогда
    Предупреждение ("Платіж не пройшов через ПОС термінал !!!");
    Предупреждение("Код помилки -"+глПОСТерминал.LastErrorCode(),"!" );
    Предупреждение(глПОСТерминал.LastErrorDescription(),"!");
    Удача=0;
    глПОСТерминал.CommClose();
    КонецЕсли;
    ЗначДиалога=Перечисление.ДаНет.Да;
    Если ВвестиПеречисление(ЗначДиалога,"Чек на терміналі напечатався?")=1 Тогда
    Если ЗначДиалога=Перечисление.ДаНет.Нет Тогда
    Удача=0;
    Возврат Удача;
    КонецЕсли;
    КонецЕсли;

    АдиТерминала=глПОСТерминал.TerminalID;
    КодАвторизації=глПОСТерминал.AuthCode;
    Транзакция=глПОСТерминал.RRN;

    Сообщить("Номер транзакції-"+Транзакция+" АдиТерминала-"+АдиТерминала+" Код авторизації-"+КодАвторизації);
    глПОСТерминал.CommClose();

    КонецЕсли;
    Возврат Удача;
    КонецФункции
  10. Гость Александр
    Гость Александр Гости 14 августа 2021 05:19
    + +1 -
    Здравствуйте. Обязательная ли функция (CommClose) после успешной проведенной операцией оплаты? И если такой функции нет могут ли быть какие-то сбои при роботе с терминалом?
  11. Dmitry
    Dmitry Посетители 5 февраля 2021 00:17
    + -1 -
    Здравствуйте. Есть ли подобная библиотека для linux? Есть задача подружить терминал с raspberryPi
  12. Pawa
    Pawa Гости 14 января 2021 20:57
    + +9 -
    Привіт, хто має ECRCommX для Windows 10? Використовуючи версію ECRCommX 1.7.6.4 на Windows Server 2016, 1c 8.3.8.19 підключається до терміналу, але при виконанні команди Purchase видає помилку: "Помилка з'єднання".
    1. Гость Александр
      Гость Александр Гости 12 сентября 2022 18:49
      + 0 -
      Добрый день, не нашли решение?
  13. Edward
    Edward Гости 14 ноября 2020 10:48
    + -1 -
    Привет! Спасибо за описание! Помогло
    Но как вы в 1С 7.7 смогли получить ResponseCode? Там же тип ULong, который в 7.7 вызывает исключение - "Тип переменной не поддерживается"
  14. Андрій
    Андрій Гости 14 сентября 2020 13:50
    + +1 -
    Привіт з 2020 :-)
    Подружити вийшло! Дмитру велике дякую! Неочікувано було те, що на банальні команди POSGetInfo() потрібно вичікувати поки термінал "роздуплитись" і після цього забирати відповідь іншою командою, в даному випадку TerminalInfo().

    Дружив 1С 7.7 (РДП) через айзернет. Все вийшло.
    Якщо комусь потрібна допомога - стукайте на мило)
    1. Владимир
      Владимир Гости 19 июля 2021 18:12
      + -1 -
      Привет. Очень надо через ETHERNET!!!

      Мой: TVladimir РАВЛИК meta.ua
  15. Никита
    Никита Гости 25 июля 2020 11:58
    + -1 -
    Автор, спасибо тебе огромное! по твоей статье я сделал свою интеграцию с терминалом от приватБанка
  16. Vasil2009
    Vasil2009 Посетители 5 ноября 2019 15:36
    + -1 -
    Добрый день, дайте совет, мы разрабатываем ПО и оборудование для Киосков Самообслуживания нужно подвязать интегрированный POS-терминалы (пин-пад)к софту, куда обратиться что бы получить на тестирование или хотя бы документацию по подвязке.. В привате найти контакты того кто в теме почти не реально , Банкомсвязь тоже неделю молчит.. Может у кого есть прямые контакты, буду признателен...

    Добрый день возникла необходимость в подвязке Интегрированного Банковского Терминала от Приват Банка , кто может подсказать как получить на тестирование настроенного на тестовую среду устройства типа Ingenico iPP350 драйвера к нему и руководства для программиста, может у кого есть опыт и может подсказать контакты...
  17. Гость Дмитрий
    Гость Дмитрий Гости 13 октября 2018 18:01
    + -1 -
    Добрый день!
    Интересут возможность выпролнения сценария на терминале.
    1)При попытке выполнить прилагаемый сценарий "Печать копии чека"
    StartScenario(2,'< ActionScenarioRequest > < Action > PrintCopy< /Action > < TXN > 33 </ TXN > </ ActionScenarioRequest >')
    Возвращает ответ
    < ActionScenarioResponse >< Result >Помилка параметрів</ Result >< ResultCode >1000</ ResultCode ></ ActionScenarioResponse >
    Если менять ScenarioID c 2 на 1,3,4... возращает ошибку
    4:Операція не дозволена
    2)Но больше интересно преавторизировать карточки гостей за бронирование (Отелем)
    Приведен пример сценария
    < ActionScenarioRequest >
                    < Action >Preauthorization</ Action >
                    < Amount >27 </ Amount >
    </ ActionScenarioRequest >
    При попытке выполнить возвращает ответ
    < ActionScenarioResponse > < Result >Операція не дозволена </ Result >< ResultCode >1000</ ResultCode ></ ActionScenarioResponse >
    И совсем непонятно как указать параметр номер карты и дата действия (необходимы для преавторизации в ручном режиме)
    В ручном режиме преавторизация на этом терминале работает
  18. Пенкер Маркет
    Пенкер Маркет Посетители 7 октября 2018 10:42
    + -1 -
    Здрасте, вопрос по merchant. Я так понял ето два личних счета в одном терминале. Как именно делается вибор счета: а)каждий раз при оплате вибираеш "merchant 1" или "merchant 2"? или может бить б)раз вибрал merchant 2 и пока настройка не будет изменина все деньги будут ити на второй счет?
    1. DmitryAVET
      DmitryAVET Создатель 7 октября 2018 13:03
      + -1 -
      Здравствуйте. Команда на оплату идет в формате
      Purchase(X,Y,Z);

      где Z - идентификатор мерчанта, т.е. давая команду на оплату указываете мерчанта, вот и все.
  19. Админ Админ
    Админ Админ Посетители 19 июля 2018 16:32
    + 0 -
    Добрый день! Подскажите, есть ли возможность при помощи библиотеки ECRCommX, получить ввод цыфр с клавиатуры терминала (iCT220). Допустим, есть сеть торговых точек. Покупаль имеет бонусную карту, на которой стоит пароль. Есть ли возможность реализовать ввод пароля от бонусной карточки через терминал?
    1. DmitryAVET
      DmitryAVET Создатель 19 июля 2018 20:01
      + 0 -
      Терминал не даст вам доступ к PIN-паду. Пинпад служит для безопасного ввода пин-кода от банковской карты. Насколько я знаю, данные между терминалом и пинпадом даже шифруются, а сам пинпад жестко привязан к конкретному аппарату.
  20. Anatoliy Tkachenko
    Anatoliy Tkachenko Посетители 21 июня 2018 09:32
    + 0 -
    Как загрузить сценарий для считывания паспортных данных?
    Что собой являет сам сценарий StartScenario(ULONG ulScenarioID, BSTR bsScenarioData) ?
  21. Anatoliy Tkachenko
    Anatoliy Tkachenko Посетители 20 июня 2018 13:47
    + -1 -
    Добрый день!
    Подскажите пожалуйста как считывать данные с пластикового ID паспорта гр. Украины с помощью терминалов Ingenico?
    Возможно ли применение библиотеки ECRCommX?
    1. Константин
      Константин Гости 5 июля 2018 10:35
      + 0 -
      С помощью BPOS можно считывать ID-карты. Но такая возможность реализована только для терминалов новой линейки Ingenico Tetra. Старая линейка Ingenico Telium 2 не поддерживает чтение ID-карт.
      Для вызова чтение карты с кассы необходимо использовать сценарий:

      StartScenario(ULONG ulScenarioID, BSTR bsScenarioData) This function is used to run scenario on POS.
      [IN] ulScenarioID – index of scenario on POS, e.g. 1, 17 etc.
      [IN] bsScenarioData – the xml-buffer with scenario specifiaction. Max size is 1200
      bytes.

      Где ulScenarioID для данного сценария 4.
      Сам сценарий:
      <BPReq>
      <CAN>000000</CAN>
      <CardWaitTimeout>10</CardWaitTimeout>
      </BPReq>
      Где CAN – последние 6 цифр номера документа.
  22. Микола
    Микола Гости 10 мая 2018 11:55
    + -1 -
    Дуже дякую за допомогу. Вийшло подружити термінал з 1С. )
  23. DmitryAVET
    DmitryAVET Создатель 25 октября 2016 19:18
    + -1 -
    Вы LastResult обрабатываете? Там же есть ответ, что операция не прошла, после чего завершаете цикл, к тому же есть отдельная команда Cancel().
  24. Peter
    Peter Гости 25 октября 2016 15:26
    + -1 -
    Добрый день!
    Столкнулся с ситуацией (пока провожу тесты).Если у клиента отсутсвуют средства на счету терминал оклоняет оплату и как правильно ее закрыть (неудавшуюся транзакцию). При попытке провести следующую оплату (деньги на счету есть)терминал спрашивает - Продолжить транзакцию - Отмена (или при Продолжить понимается новая транзакция?) При отмене транзация закрывается и оплатить карточкой уже невозможно.Возможно сумбурно, но думаю поймете.
  25. Валентин
    Валентин Гости 19 октября 2016 15:01
    + -1 -
    Валерий, насколько я понял, вы интегрировали в свою систему приватбанковский терминал?

    Если так - очень хотелось бы пообщаться с вами лично, есть идея интересного проекта на этой основе. Мой скайп val.budkin.
  26. Валера
    Валера Гости 13 июля 2016 08:40
    + +1 -
    Подведем итог с разрешения администрации.
    Проблема с ошибкой "Карта не обслуживается" возникает в случае, если на терминале активирована программа "Бонус +" от ПриватБанка. Решается заменой кода мечанта с 1 на 0(ноль).
    гпPOSТерминал.Purchase(100,0,0);
    После этого все работает отлично, со всеми картами.
    Спасибо администрации ресурса за полезную информацию и помощь в работе с возникшими вопросами.
  27. Валера
    Валера Гости 8 июля 2016 10:44
    + 0 -
    Причина была в следующем:
    1. Не была активирована работа по ЮСБ (как и написано)
    2. Вместо BPOS стоял 4in1
    Это все решили с банком.
    Теперь проблема как у (#16) - "Карта не обслуживается" что чип, что лента, видимо что-то упущено в процессе
    Буду разбираться.
  28. DmitryAVET
    DmitryAVET Создатель 7 июля 2016 20:55
    + +1 -
    Банк должен активировать работу по USB/COM в настройках терминала и установить BPOS, иначе работать не будет. При подключении кабеля в диспетчере устройств SAGEM Telium отображается?
  29. Валера
    Валера Гости 6 июля 2016 09:27
    + 0 -
    Если бы я знал.. Есть возможность проверить самому, или это надо банк трусить?
  30. DmitryAVET
    DmitryAVET Создатель 6 июля 2016 01:03
    + +1 -
    BPOS в терминале самом включен?

Что будет, когда закончится лицензия Kaspersky Free?

Чуть более года назад я уже писал про бесплатный антивирус от Лаборатории Касперского. С тех пор Kaspersky Free успешно прижились на многих ПК и...

Обзор Ubiquiti Rocket 5ac Prism: оптимальное решение для базовых станций и

Год назад, на конференции Ubiquiti NEXT 2015, проходящей в Лас-Вегасе, компания Ubiquiti представила ряд своих новинок, среди которых Rocket 5ac...

Подключаем 3G-модем к Mikrotik: самый простой вариант резервирования канала. На

Не так давно на одном из небольших филиалов у нас возникли проблемы с интернет-провайдером. Суть проблемы следующая. Есть государственное учреждение,...

Интеграция платежных терминалов Ingenico с бизнес-приложениями на платформах

Чуть более года назад мы уже писали про интеграцию POS-терминалов с торговым программным обеспечением на примере популярных терминалов Ingenico...

Соцсети: фундаментальный прорыв

Более 50% людей в мире младше 30 лет. 96% тех из них, кто родился в новом веке, состоят в социальных сетях. Чтобы получить 50 миллионов слушателей,...

По стопам эволюции

Существуют ли на самом деле бесполезные органы? Вряд ли кому-то захочется расстаться со своим аппендиксом до тех пор, пока он его не начнет...

авторизация на сайте

Войти при помощи Facebook Войти при помощи Google+
Забыли пароль?