Как подключить эквайринговый терминал Сбербанка к 1С 7.7 Торговля и Склад?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При автоматизации кассового узла в конфигурации 1С:Торговля и Склад 7.7 часто возникает необходимость прямой интеграции с банковскими терминалами эквайринга (например, VeriFone vx820). Сбербанк предоставляет собственную внешнюю компоненту SBRFCOM.DLL, которая позволяет инициировать оплату картой и получать слип-чек непосредственно из кода 1С. Разберем по шагам, как правильно настроить компоненту, передать параметры в методы оплаты и обработать результат транзакции.

Регистрация библиотеки и системные требования

Платформа 1С 7.7 является строго 32-битным приложением, поэтому при настройке рабочего места на современных версиях Windows необходимо учитывать особенности разрядности:

  1. Скопируем файлы дистрибутива Сбербанка (обычно каталог C:\sc552\ или C:\pilot_nt\). В каталоге обязательно должны находиться базовые библиотеки драйвера: sbrf.dll, sb_kernel.dll, gate.dll (или pilot_nt.dll) и сама компонента SBRFCOM.DLL.
  2. На 64-битных версиях Windows зарегистрируем COM-библиотеку через 32-битную версию утилиты regsvr32. Запустим командную строку от имени администратора и выполним команду: C:\Windows\SysWOW64\regsvr32.exe C:\sc552\SBRFCOM.DLL.
  3. Предоставим пользователям 1С полные права доступа (NTFS) на чтение и запись к каталогу с файлами драйвера, так как библиотека динамически формирует служебные файлы ответов и логи.

Разбор параметров метода ОплатитьПлатежнойКартой

Проанализируем частую проблему разработчиков: какие параметры передаются на терминал, а какие возвращаются обратно. В методе ОплатитьПлатежнойКартой входным параметром является только сумма операции (в копейках). Все остальные аргументы являются выходными: они передаются по ссылке и заполняются компонентой после проведения транзакции.

Существуют две версии библиотеки SBRFCOM.DLL:

  1. Версия на 3 параметра: ОплатитьПлатежнойКартой(Сумма, RRN, КодАвторизации).
  2. Версия на 7 параметров: ОплатитьПлатежнойКартой(Сумма, RRN, КодАвторизации, Hash, IsOwn, CardName, CardNum).

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

Пример программного кода для 1С 7.7

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


Процедура ПриОткрытии()
    ПутьДоКомпоненты = "C:\sc552\SBRFCOM.DLL";
    Если ЗагрузитьВнешнююКомпоненту(ПутьДоКомпоненты) = 1 Тогда
        // Компонента успешно загружена
    Иначе
        Предупреждение("Внешняя компонента SBRFCOM.DLL не найдена или не зарегистрирована!");
    КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьОплатуКартой(СуммаРублей)
    Перем Терм, рез, ОписКО, Слип, буф, НомерСтр;
    Перем RRN, AuthCode, Hash, IsOwn, CardName, CardNum;
    
    // Сумма передается целым числом в копейках (например, 150 руб. 50 коп. = 15050)
    Amount = СуммаРублей * 100;
    
    // Инициализируем выходные переменные
    RRN = "";
    AuthCode = "";
    Hash = "";
    IsOwn = 0;
    CardName = "";
    CardNum = "";
    ОписКО = "";
    
    Терм = СоздатьОбъект("AddIn.SBRFCOMExtension");
    
    // Вызов метода оплаты
    рез = Терм.ОплатитьПлатежнойКартой(Amount, RRN, AuthCode, Hash, IsOwn, CardName, CardNum);
    
    Если рез = 1 Тогда
        Слип = "";
        буф = "";
        
        // Получаем строки банковского слип-чека
        Для НомерСтр = 1 По Терм.КоличествоСтрокСлипЧека Цикл
            Терм.ПолучитьСтрокуСлипЧека(НомерСтр, буф);
            Слип = Слип + буф + РазделительСтрок;
        КонецЦикла;
        
        Сообщить("Оплата успешно проведена. Код авторизации: " + AuthCode + ", RRN: " + RRN);
        Сообщить("Слип-чек:");
        Сообщить(Слип);
        
        // Здесь можно передать текст слип-чека на фискальный регистратор
    Иначе
        Терм.ПолучитьОшибку(ОписКО);
        Предупреждение("Ошибка при выполнении оплаты: " + ОписКО);
    КонецЕсли;
    
    Терм = 0;
КонецПроцедуры

Альтернативный вариант интеграции через sb_pilot.exe

Если в процессе работы через COM-объект возникают конфликты или сбои при работе в терминальных сессиях (RDP), рассмотрим альтернативный и крайне надежный способ — взаимодействие через консольную утилиту sb_pilot.exe (или pilot_nt.exe).

Разберем команды запуска утилиты:

  1. Оплата: sb_pilot.exe 1 [СуммаВКопейках]
  2. Возврат: sb_pilot.exe 2 [СуммаВКопейках] [RRN]
  3. Отмена операции дня: sb_pilot.exe 3 [СуммаВКопейках] [RRN]
  4. Сверка итогов (закрытие банковской смены): sb_pilot.exe 7

Посмотрим на пример вызова утилиты из 1С 7.7 с получением слип-чека из результирующего текстового файла:


Процедура ОплатаЧерезКонсоль(СуммаРублей)
    СуммаКопеек = СуммаРублей * 100;
    КоманднаяСтрока = "C:\sc552\sb_pilot.exe 1 " + Строка(СуммаКопеек);
    
    // Запуск утилиты с ожиданием завершения
    WshShell = СоздатьОбъект("WScript.Shell");
    КодВозврата = WshShell.Run(КоманднаяСтрока, 0, 1);
    
    // Результат транзакции записывается в файл "e", а текст слипа — в файл "p"
    ФайлОтвета = СоздатьОбъект("Текст");
    ФайлОтвета.Открыть("C:\sc552\e");
    
    Если ФайлОтвета.КоличествоСтрок() > 0 Тогда
        КодОшибки = СокрЛП(ФайлОтвета.ПолучитьСтроку(1));
        Если КодОшибки = "0" Тогда
            ФайлСлипа = СоздатьОбъект("Текст");
            ФайлСлипа.Открыть("C:\sc552\p");
            Сообщить("Оплата выполнена успешно!");
            Сообщить(ФайлСлипа.ПолучитьТекст());
        Иначе
            Предупреждение("Ошибка проведения оплаты. Код: " + КодОшибки);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Особенности работы в терминальном режиме (RDP)

При работе пользователей в терминальном сервере важно учитывать нюансы подключения оборудования:

  1. Использование Ethernet (TCP/IP): Проброс виртуальных COM-портов USB-терминала VeriFone vx820 через клиент RDP часто приводит к потерям пакетов и разрывам связи. Рекомендуется подключать терминал к локальной сети по IP-адресу, прописав параметры сетевого порта в файле конфигурации pinpad.ini.
  2. Отключение графических окон: В файле pinpad.ini установим параметр ShowScreens=0, чтобы избежать зависания окон драйвера внутри терминальной сессии.
← На главную