Эмулятор эквайрингового терминала 1С

Прогресс в области товарно-денежных отношений привел к появлению одного из невероятно удобных изобретений – банковских карт. В самом начале они предназначались для получения денежных средств, которые хранятся в банке, но с течением времени функционал карт был расширен для удобства обслуживания в торговых точках – появился эквайринг.

Эквайринг – это оплата товаров и услуг, предоставляемых организацией, при помощи платежных карт. Это очень удобный, современный и простой способ оплаты, который приобрел большую популярность и с установкой которого были связаны многие запросы на доработку 1С, пока установка не стала встроенным элементом системы. При этом, подключение эквайринга к 1С – не единственное действие. Чтобы проводить операции по эквайрингу в своей организации, необходимо заключить соответствующий договор с обслуживающим банком, который предоставит оборудование для приема платежей на условиях, которые прописаны в договоре – это может быть аренда либо безвозмездное использование.

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

Как только покупатель предъявляет карту для оплаты покупки продавцу, возникает определенный ряд операций. После получения данных о покупателе терминал связывается с системой банка и передает данные о сумме и покупателе. Распространенная информация – это пин-код карты. Далее приходит ответ на устройство в виде оплаты платежа либо отказа, в случае неверного ввода пароля.

Работа терминалов кардинально отличается от работы любого другого торгового оборудования. Если драйвера либо сама система настроена неверно, это может привести к сбою в работе всех передающих систем.

Для начала работы необходимо сделать несколько важных шагов:

  • Заключить договор с банком на предоставление услуг эквайринга;
  • Получить POS-терминал у банка;
  • Обговорить условия сотрудничества и получить консультацию по установке и настройке оборудования;
  • Получить у банка соответствующие драйвера для POS-терминалов.

Во время консультации служащий банка обязательно объяснит, как и куда нужно зарегистрировать и скопировать фалы. Далее нужно подключить терминал и считывающее устройство для набора пин-кода через USB-порт.

Загрузку параметров библиотек легче всего сделать с помощью запуска предназначенной для этого программы, поставляемой с оборудованием.

Далее состоится настройка эквайринга в 1С. Для этого перейдем в системе 1С на закладку «Администрирование» и в подраздел «Подключаемое оборудование».

Рис.1 Настройка эквайринга

В открывшейся выберем «Эквайринговое оборудование».

Рис.2 Эквайринговое оборудование

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

Рис.3 Выбор банковской системыРис.4 Выбор банковской системыРис.5 Выбор банковской системы

При четком соблюдении этапов откроется форма «Настройка параметров Эквайринговой системы».

Рис.6 Форма «Настройка параметров Эквайринговой системы»

После установки всех драйверов проверяем работоспособность оборудования. Выбираем в системе «Оплатить картой», вводим сумму и жмем «Оплата платежа». Система сразу попросит вставить банковскую карту в POS-терминал. До этого терминал нужно обязательно подключить к фискальному регистратору.

После выполнения всех настроек в 1С 8 (ред. 3.0) появится возможность принимать оплату и проводить расчеты с покупателями при помощи документа «Операции по платежным картам», который находится в разделе «Банк и касса».

Рис.7 Операции по платежным картам

Тут мы создаем документ в соответствии с типом продажи – «Оплата от покупателя», предназначенный для проведения оплаты от оптовых покупателей, а «Розничная выручка» для отражения выручки по неавтоматизированной торговой точке.

Рис.8 Оплата от покупателя/Розничная выручка

«Вид оплаты» заполняется из справочника. Он содержит необходимую информацию для заполнения договора эквайринга и счета расчетов.

Рис.9 Вид оплаты

При проведении документ формирует следующие проводки:

Рис.10 Проводки

Важно отметить, что сама процедура подключения такого оборудования довольно сложная, так как при первом подключении с данным типом оборудования могут возникнуть некоторые проблемы. Большая часть торгового оборудования использует одностороннюю связь с системами учета и не требует дополнительных настроек. Оборудование для эквайринга – POS-терминалы, напротив, используют связь с внешними программно-аппаратными комплексами. Для их правильной настройки об этом нюансе важно не забывать. И хотя речь идет не о доработке 1С, для быстрого и правильного подключения оборудования в рамках сопровождения программ 1С лучше приглашать профильных специалистов.

Не так давно потребовалось срочно реализовать эквайринг от Сбербанка в одно самописной конфигурации. За основу была взята соответствующая часть конфигурации «Библиотека подключаемого оборудования» от 1С, из которой я выкинул все лишнее. Отмечу, что «лишними» те или иные части кода были признаны исходя из особенностей задачи и моего субъективного мнения, то есть в Вашем случае это может быть не так.

Отдельно отмечу, что эквайринг — тема очень ответственная, ибо напрямую связана с деньгами (можно, например, продать товар и не взять за него денег), поэтому прошу быть предельно осторожными и не стесняться добавлять всевозможные проверки.

Ну и напоследок напомню, что все написанное ниже приводится в ознакомительных целях и использовать эту информацию Вы можете исключительно на свой страх и риск.

Регистрация и подключение библиотеки

Итак, для работы нам нужно зарегистрировать в системе две DLL-ки: SBRF.dll и SBRFCOM.dll. Библиотека SBRFCOM.dll бывает в двух вариантах: старый (3 параметра) и новый (7 параметров), нам естественно нужен новый.

Получить обе эти DLL-ки можно у того специально обученного человека из Сбербанка, который придет настраивать терминал. Регистрацию библиотек в системе обычно делает все тот же сотрудник Сбербанка, но если этого по какой-то причине не произошло, то библиотеки нужно зарегистрировать самостоятельно, из командной строки при помощи утилиты regsvr32 (командную строку запустите от имени администратора):

Регистрация SBRFCOM

Подключение зарегистрированной библиотеки необходимо выполнить перед совершением каких-либо операций с эквайринговым терминалом, делается это примерно так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 &НаКлиенте Процедура Подключение(Команда) ОбъектДрайвераАвторизатора = ПодключитьАвторизатор(); КонецПроцедуры &НаКлиенте Функция ПодключитьАвторизатор() Попытка ПодключитьВнешнююКомпоненту(«AddIn.SBRFCOMObject»); ОбъектДрайвераАвторизатора = Новый («AddIn.SBRFCOMExtension»); Исключение ОбъектДрайвераАвторизатора = Неопределено; Сообщить(«Ошибка при подключении авторизатора: «+ОписаниеОшибки()); КонецПопытки; Возврат ОбъектДрайвераАвторизатора; КонецФункции

В случае успеха, переменную «ОбъектДрайвераАвторизатора» нужно каким-либо образом сохранить для дальнейшего использования, именно через эту переменную будут вызываться все необходимые методы.

Вспомогательные функции SBRFCOM

Общая схема работы с методами библиотеки SBRFCOM (кроме сверки итогов) такова:

  • Вызвали метод;
  • Если все хорошо, то получили и распечатали слип;
  • Если возникли проблемы — отменили операцию.

Вначале скажу несколько слов о слипе. Итак слип — это документ, который печатается в двух экземплярах (один клиенту, один организации) при осуществлении каких-либо операций с банковской картой. Печать слипа обязательна (хотя зачастую обходятся и без него), так как в случае каких-либо разногласий с банком эквайрером разбирательства начинаются с проверки наличия слипа по конкретной операции. Технически слип формируется самим терминалом (по крайней мере в нашем случае) или вручную. Если надумали формировать слип вручную, то в конфигурации «Библиотека подключаемого оборудования» имеется общий макет содержащий пример слипа.

Рассмотрим две служебные функции. Первая из них — «АварийнаяОтменаОперации», служит для отмены операции в том случае, когда при получении слипа возникли ошибки. О важности получения слипа говорилось выше.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 &НаКлиенте Функция АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер) Результат = Истина; Ошибка = Неопределено; ОбъектДрайвераАвторизатора.ТипКарты = 0; СуммаВременная = СуммаВРублях * 100; Ответ = ОбъектДрайвераАвторизатора.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер); Если НЕ Ответ Тогда ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка); Результат = Ложь; КонецЕсли; Возврат Результат; КонецФункции

Вторая функция получает строки слипа и формирует из них готовую к печати текст.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 &НаКлиенте Функция ПолучитьСтрокиСлипЧека(СлипЧек) Результат = Истина; СлипЧек = «»; Для Индекс = 1 По ОбъектДрайвераАвторизатора.КоличествоСтрокСлипЧека Цикл СтрокаЧека = «»; УспешноПолучено = ОбъектДрайвераАвторизатора.ПолучитьСтрокуСлипЧека(Индекс, СтрокаЧека); Если УспешноПолучено Тогда Если КодСимвола(СтрокаЧека) = 0 Тогда СлипЧек = СлипЧек + «» + Символы.ПС + СтрокаЧека; Иначе СлипЧек = СлипЧек + СтрокаЧека + ?(Индекс = ОбъектДрайвераАвторизатора.КоличествоСтрокСлипЧека, «», Символ(13) + Символ(10)); КонецЕсли; Иначе Сообщить(«Ошибка при получении строк слип-чека»); Результат = Ложь; КонецЕсли; КонецЦикла; Если Результат Тогда КопииСлипЧека = «»; Для Индекс = 1 По ОбъектДрайвераАвторизатора.КоличествоКопийСлипЧека Цикл КопииСлипЧека = КопииСлипЧека + СлипЧек + ?(Индекс = ОбъектДрайвераАвторизатора.КоличествоКопийСлипЧека, «», Символы.ПС + «» + Символы.ПС); КонецЦикла; СлипЧек = КопииСлипЧека; КонецЕсли; Возврат Результат; КонецФункции

Основные функции SBRFCOM

Теперь приведем самую главную функцию — собственно оплата картой.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 &НаКлиенте Функция ОплатитьКартой(СуммаВРублях) Результат = Ложь; СсылочныйНомер = Неопределено; КодАвторизации = Неопределено; КодХеш = Неопределено; КартаСбербанка = Неопределено; НазваниеКарты = Неопределено; Ошибка = Неопределено; ОбъектДрайвераАвторизатора.ТипКарты = 0; СуммаВременная = СуммаВРублях * 100; НомерКарты = «****************»; Попытка Ответ = ОбъектДрайвераАвторизатора.ОплатитьПлатежнойКартой(СуммаВременная, СсылочныйНомер, КодАвторизации, КодХеш, КартаСбербанка, НазваниеКарты, НомерКарты); Исключение Сообщить(«Ошибка при работе с библиотекой SBRFCOM:»+ОписаниеОшибки()); Возврат Результат; КонецПопытки; Если НЕ Ответ Тогда ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка); Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(СлипЧек); Если Результат Тогда //ПечатьТекста(СлипЧек); Иначе Сообщить(«Произошла ошибка. Аварийная отмена операции…»); АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции

В случае успешного выполнения переменные, объявленные в начале функции, обретают осмысленные значения и было бы неплохо сохранить их каким-либо образом с привязкой к документу оплаты, эти данные потребуются для отмены или возврата платежа. Закомментированная строка вызывает функцию печати текста, реализация этой функции может быть различной.

Далее следует функция отмены платежа, она применяется для отмены платежа по платежной карте совершенного в этот же день (до сверки итогов).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 &НаКлиенте Функция ОтменитьОперацию(СуммаВРублях, СсылочныйНомер) Результат = Истина; Ошибка = Неопределено; ОбъектДрайвераАвторизатора.ТипКарты = 0; СуммаВременная = СуммаВРублях * 100; Ответ = ОбъектДрайвераАвторизатора.ОтменитьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер); Если НЕ Ответ Тогда ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка); Результат = Ложь; Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(СлипЧек); Если Результат Тогда //ПечатьТекста(СлипЧек); Иначе АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции

Если же требуется отменить оплату спустя один или несколько дней, то нужно использовать возврат платежа.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 &НаКлиенте Функция ВозвратПлатежа(СуммаВРублях, НомерКарты) Результат = Ложь; Ошибка = Неопределено; СсылочныйНомер = Неопределено; КодАвторизации = Неопределено; КодХеш = Неопределено; КартаСбербанка = Неопределено; НазваниеКарты = Неопределено; ОбъектДрайвераАвторизатора.ТипКарты = 0; СуммаВременная = СуммаВРублях * 100; Попытка Ответ = ОбъектДрайвераАвторизатора.ВернутьПлатежПоПлатежнойКарте(СуммаВременная, СсылочныйНомер, КодАвторизации, КодХеш, КартаСбербанка, НазваниеКарты, НомерКарты); Исключение Сообщить(«Ошибка при работе с библиотекой SBRFCOM:»+ОписаниеОшибки()); Возврат Результат; КонецПопытки; Если НЕ Ответ Тогда ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка); Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(СлипЧек); Если Результат Тогда //ПечатьТекста(СлипЧек); Иначе Сообщить(«Произошла ошибка. Аварийная отмена операции…»); АварийнаяОтменаОперации(СуммаВРублях, СсылочныйНомер); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции

Сверка итогов

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 &НаКлиенте Функция СверкаИтогов() Результат = Истина; Ошибка = Неопределено; Ответ = ОбъектДрайвераАвторизатора.ИтогиДняПоКартам(); Если НЕ Ответ Тогда ОбъектДрайвераАвторизатора.ПолучитьОшибку(Ошибка); Результат = Ложь; Иначе СлипЧек = Неопределено; Результат = ПолучитьСтрокиСлипЧека(СлипЧек); Если Результат Тогда //ПечатьТекста(СлипЧек); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции

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

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Записки IT специалиста

Достаточно часто в практике автоматизатора или разработчика возникают ситуации, когда требуется проверить корректность работы конфигураций 1С:Предприятие с торговым оборудованием. Но есть категории оборудования, использование которого в тестовом режиме крайне затруднительно — это ККТ и банковские терминалы. Одно дело, если нужно просто проверить корректность подключения, тогда можно просто «пробить» что-нибудь недорогое и положить пару рублей в кассу (или списать с карты), иначе нужно искать иные решения. Одним из неплохих вариантов будет использование эмуляторов.

Эмулятор контрольно-кассовой техники нового образца

Долгое время в составе 1С поставлялся эмулятор фискального регистратора, который позволял протестировать работу с ККТ без подключения физического оборудования. С переходом на онлайн-кассы он стал неактуален, новый эмулятор в состав конфигураций не входит, но доступен на портале 1C:Обновление программ.

/ Зеркало

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

Драйвер эмулятора поставляется в виде архива, но просто так загрузить его в 1С не получается, во всяком случае мы не разу не смогли это сделать, поэтому пойдем несколько более сложным, но надежным путем.

Для начала распакуем архив и поместим библиотеку FPEmulatorKKT1C2.dll в какое-нибудь надежное расположение (чтобы никто случайно не удалил или не переместил), скажем в C:\Program Files (x86)\1cv8. После чего зарегистрируем ее:

regsvr32 «C:\Program Files (x86)\1Cv8\FPEmulatorKKT1C2.dll»

Затем откроем 1С и перейдем в раздел Подключаемого оборудования, в зависимости от конфигурации пути могут несколько отличаться. Затем откроем Подключение и настройка оборудования и выберем Драйверы оборудования.

Нажмем кнопку Создать и заполним поля следующим образом:

  • Тип оборудования — ККТ с передачей данных
  • Наименование — 1C: Эмулятор контрольно-кассовой техники нового образца (хотя это некритично, можете написать все что угодно)
  • Идентификатор объекта — AddIn.EmulatorKKT1C2

Теперь можно подключить эмулятор как обычный экземпляр оборудования.

После создания оборудования загляните в его настройки и установите нужное время отображения на экране, а также включите отображение нужных реквизитов на других закладках.

Теперь при пробитии чека в нижнем правом углу будет всплывать окно с его содержимым:

На «настоящий» чек не совсем похоже, но такая цель и не ставилась (скорее наоборот), зато все необходимые реквизиты присутствуют и можно проверить правильность формирования чека.

Эмулятор эквайрингового терминала

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

Штатной обработки в 1С нет, но мы нашли отличный эмулятор, написанный одним из пользователей Инфостарта. Мы настоятельно советуем скачивать драйвер именно с Инфостарта за стартмани, чтобы таким образом поддержать автора и его дальнейшие разработки.

/ Зеркало

В отличии от эмулятора ККТ, данный драйвер можно просто загрузить из архива.

Никаких особых настроек эмулятор не требует, зато теперь мы можем эмулировать произвольные строки или ошибки с слип-чеке или ошибки терминала:

В сочетании с эмулятором онлайн-кассы вы увидите на экране сначала слип-чек, а затем кассовый:

Данные эмуляторы мы широко используем в повседневной деятельности, как при разработке, так и при тестировании и поэтому можем смело рекомендовать их нашим читателям.