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

13 февраль 2015 60 085 32

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

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

 

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

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

 

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

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

Посмотреть онлайн файл: 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качиваний: 492)

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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


Список всех доступных функций и параметров 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. DmitryAVET
    DmitryAVET Создатель 25 октября 2016 19:18
    + 0 -
    Вы LastResult обрабатываете? Там же есть ответ, что операция не прошла, после чего завершаете цикл, к тому же есть отдельная команда Cancel().
  2. Peter
    Peter Гости 25 октября 2016 15:26
    + 0 -
    Добрый день!
    Столкнулся с ситуацией (пока провожу тесты).Если у клиента отсутсвуют средства на счету терминал оклоняет оплату и как правильно ее закрыть (неудавшуюся транзакцию). При попытке провести следующую оплату (деньги на счету есть)терминал спрашивает - Продолжить транзакцию - Отмена (или при Продолжить понимается новая транзакция?) При отмене транзация закрывается и оплатить карточкой уже невозможно.Возможно сумбурно, но думаю поймете.
  3. Валентин
    Валентин Гости 19 октября 2016 15:01
    + 0 -
    Валерий, насколько я понял, вы интегрировали в свою систему приватбанковский терминал?

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

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

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

    Где моя ошибка?
  13. DmitryAVET
    DmitryAVET Создатель 17 апреля 2016 12:55
    + 0 -
    Для очистки делается Z-отчет, разве нет?
  14. Настя
    Настя Гости 17 апреля 2016 10:19
    + 0 -
    Добрый день! В терминале постоянно пишет файл транзакций заполнен! Подскажите что делать?
  15. DmitryAVET
    DmitryAVET Создатель 4 апреля 2016 18:36
    + 0 -
    Менять SIM на другого оператора, как вариант. Вообще такими вопросами занимается техподдержка банка.
  16. Василий
    Василий Гости 1 апреля 2016 20:06
    + 0 -
    Добрый день подскажите пжл. при работе терминала по GPRS связи часто летит модем, то бишь при попытке соединени пишет ошибка ДЖПР ДЖСМ и не находит симку, как выличить? СПС
  17. Алексей
    Алексей Гости 20 января 2016 01:09
    + 0 -
    Проблема такая, после команды глПосТерминал.Purchase(СуммаКОплате, 0, 1);
    Терминал просит терминал просит карту, после проведения любой карты возвращает "Карта не обслуговується!", причем если просто карту провести то дает выбрать счет основной либо бонусный. Не сталкивались? Может подскажите как это побороть?
  18. DmitryAVET
    DmitryAVET Создатель 5 января 2016 10:59
    + 0 -
    Насколько я знаю, можно работать и по локальной сети с B-POS. Изначально мы так и предполагали - использовать 1 терминал на 2 соседние кассы. Для этого в настройках ПО указывается IP терминала в сети и порт, командой CommOpenTCP(IP, Port), например CommOpenTCP(192.168.1.20, 8085). Далее уже работаете с привычным набором команд.

    Но тут проблема в том, что терминал необходимо подключать к локальной сети предприятия и попросить банк настроить все это дело. Клиент не имеет доступа к настройкам терминала.
  19. Александр
    Александр Гости 4 января 2016 17:00
    + 0 -
    Здравствуйте, есть функция function CommOpenTCP, посмел предположить, что с терминалом можно общаться по Ethernet, но уже все перерыл и не нашел куда и к чему эта функция, есть у кого-то опыт?
  20. DmitryAVET
    DmitryAVET Создатель 21 ноября 2015 16:27
    + 0 -
    Добрый день! Да, есть возможность работать с Бонус+, если это необходимо. В документации достаточно информации. Merchant нужен для тех случаев, когда на фирме несколько ФОПов оформлено, т.е. терминал можно запрограммировать так, что первый мерчант будет ФОП Пупкин, а второй, например, ФОП Иванов.

    В остальных случаях достаточно единицу всегда отдавать.
  21. Константин
    Константин Гости 28 октября 2015 11:25
    + 0 -
    Добрый день

    Есть особенности при обработке карточек с Бонус+ или VIP-клуб?
    Как в данном случае выбирается счет для оплаты: основной, бонусный?
    Merchant в процедуры оплаты можно передавать всегда =1?
  22. Поддержка Ощадбанка
    Поддержка Ощадбанка Гости 13 августа 2015 16:47
    + 0 -
    Автор молодець. Статья просто супер. Ваше описание процесса это незаменимый помощник для тех, у кого интеграция терминала это задача от руководства.
  23. глюк
    глюк Гости 6 мая 2015 13:45
    + 0 -
    Я бы даже уточнил, что используются настройки не терминала, а терминального софта Банкомсвязи.
    Для программиста на стороне ПК оба "протокола" ECRLibSgn и BPOS1 - это обычные API, реализованные через подключаемую DLL-ку. А вот протокол(ы) обмена через СОМ-порт (эмулированный переходником USB-UART, встроенным в терминал Ingenico) между DLL-кой и терминальным софтом Банкомсвязи - это уже ноу-хау Банкомсвязи.
  24. DmitryAVET
    DmitryAVET Создатель 5 мая 2015 23:27
    + +1 -
    Документа называется "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 ставят.
  25. глюк
    глюк Гости 5 мая 2015 18:19
    + 0 -
    Давайте все же придерживаться правильной терминологии. 4in1 и BPOS - это не "протоколы", а API, разработанные программистами Банкомсвязи для обмена данными между прикладным софтом на ПК и ПОС-терминальным софтом Банкомсвязи. Обмен данными идет через аппаратный переходник USB-UART, встроенный в терминалы Ingenico. Кстати интересно, зачем программистам Банкомсвязи понадобилось разрабатывать целых два API?
  26. DmitryAVET
    DmitryAVET Создатель 4 мая 2015 23:18
    + 0 -
    Протоколов 2:

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

    Просите у банка BPOS, либо подключайте ECRCommX.ECRLibSgn и следуйте соответствующей документации. В этой публикации рассматривается протокол BPOS.
  27. Олег Владимирович
    Олег Владимирович Гости 4 мая 2015 22:31
    + 0 -
    Оказалось что все таки проблема была в банке требовалась у них включить эту возможность
    Хотя просил я у них протокол Bpos включили мне 4in1
    Есть ли разница какой использовать?Если что снова буду тормошить банк?
  28. DmitryAVET
    DmitryAVET Создатель 3 мая 2015 21:11
    + 0 -
    Олег Владимирович, они подключаются как эмулятор USB-COM. Т.е. при подключении к ПК, если USB активирован в настройках терминала, отобразится SAGEM Telium COM.

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

    Если COM-недоступен, то LastErrorCode = 1 (error opening COM port). Пишите код согласно документации, там достаточно команд для обработки кода ошибки и вывода соответствующей информации.
  29. Олег Владимирович
    Олег Владимирович Гости 3 мая 2015 20:16
    + 0 -
    У меня подозрение что порт не открывается так как такой же результат при указании любого порта.
    Возможно ли что приватбанк закрыл в терменали работу через usb. техподдержка банка молчит
  30. DmitryAVET
    DmitryAVET Создатель 30 апреля 2015 22:27
    + 0 -
    Олег Владимирович, при получении 2 нужно зацикливать и ждать, пока возвращает 2.

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

    Geniusbsd,

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

Что будет, когда закончится лицензия 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+ Войти при помощи Яндекс
Забыли пароль?