Кассовый эквайринг Сбербанк

Посмотрите и покажите кассирам видео

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

Касса напрямую не взаимодействует с пин-падом, всё общение производится через промежуточный софт Сбербанка: sbrf.dll или pilot_nt.dll - это библиотека, реализующая основные запросы к пин-паду:

  • покупка (оплата)
  • отмена транзакции
  • возврат
  • etc.

Если коротко, то Касса запрашивает у sbrf.dll или pilot_nt.dll проведение оплаты на заданную сумму, далее библиотека выполняет все необходимые действия с пин-падом и возвращает программе результат операции (в виде числового кода). Расшифровку числовых кодов нужно запрашивать у Сбербанка.

Ниже приведены рекомендуемые настройки, которые должны быть прописаны со стороны Сбера

Запросите со стороны Сбера следующие настройки:

  • Укажите специалисту Сбербанка что терминал должен формировать один слип! В настройках процессинга же в админке Лайма для Сбербанка укажите число копий слипа- два
  • Отключить требование ввода RRN при возврате
  • Разрешить проведение отмены оплаты без чтения карты

После установки и настройки sbrf.dll или pilot_nt.dll лежит где-то на диске C (C:\SBFR\, C:\sc252 и т.п. где конкретно должен сказать специалист Сбера). Если всё настроено и «работает» то так же в этой папке должна быть программа loadparm.exe - если при запуске она показывает окошечко, значит связь с пин-падом есть, иначе - нет.

Бывает что настройка выполнена не полностью, в этом случае придется что-то делать руками.

pinpad.ini - файл с настройками связи с пин-падом:

  • ComPort - номер COM порта по которому подключен пин-пад. Обычно физически пин-пад подключен к компьютеру через USB, при этом устройство встает как виртуальный ком порт. Данная настройка должна совпадать с номером порта в системе. Если вы не можете определить какой из виртуальных портов пин-пад - выключите его, один из портов должен пропасть, потом включите, он снова должен появиться, используйте его номер для настройки
  • ShowScreens - отвечает за то показывать ли диалоговое окно пин-пада при проведении операций. 1 - показывать, 0 - не показывать. Для касс рекомендуется показывать, т.е. 1
  • PinpadLog - вести ли лог обмена с пин-падом. 0 - не вести, 1 - вести.

Для того, что бы касса могла использовать sbrf.dll ее необходимо зарегистрировать в системе! Это, по идее, должны так же делать специалисты Сбербанка, но они этого не делают… обычно. В любом случае повторная регистрация не навредит:

  • Запустите командную строку с правами администратора
  • Смените текущую директорию на папку с библиотекой сбербанка

  • выполните команду
    regsvr32 sbrf.dll
    после этого обязательно должно появиться окно, с сообщением об успешной регистрации библиотеки, если окна нет - библиотека не зарегистрирована и работать программа с ней не сможет. Проверьте, все ли шаги вы выполнили по инструкции.

Если используем pilot_nt.dll необходимо на каждом рабочем месте настроить переменную среды SB_PILOT_NT_PATH и указать в ней папку в которую установлена pilot_nt.dll (после настройки кассовое приложение необходимо полностью перезапустить, если до момента настройки оно было запущено, в случае автокассы необходимо перезапустить службу Jade.Cashdesk.Service).

Для настройки параметра нажмите «Пуск» и начните вводить «переменных среды» Или нажать клавиши Win+R на клавиатуре, ввести sysdm.cpl и нажать Enter.

Запустите приложение, нажмите «Переменные среды», в группе «Системные переменные» нажмите «Создать…»

В имени переменной укажите SB_PILOT_NT_PATH, в значении папку с pilot_nt.dll:

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

В случае если при оплате/возврате возникает ошибка «Нет связи с пин-падом», или «Ошибка номер такой-то, смотрите подробности в таблице ошибок» - это означает что sbrf.dll - вернула программе соответствующий код ошибки и программа считает операцию не выполненной.

В случае проблем для диагностики нужно сообщить и прислать:

  • Дату, время, сумму и тип операции (покупка или возврат)
  • Предоставить читаемые сканы любых отпечатанных документов (чеки слипы и т.п.)
  • Заархивировать и прислать папку с логами и настройками кассы C:\ProgramData\Lime-Soft\Jade.Cashdesk
  • Прислать файл с логами Сбербанка: sbkernel[yymm].log (где: yy - две последних цифры года, mm - номер месяца, скажем логи за январь 2022 года будут называться sbkernel2201.log). Файлы логов хранятся в папке, рядом с sbrf.dll (обычно что-то типа C:\SBFR\, C:\sc252, C:\sc525)

При потерях связи с пин-падом:

Эквайринг сбербанка поддерживает возможность просмотра журнала операций и отмены оных. Отмена транзакций протоколируется и выводится в специальном отчёте: Отмены транзакций эквайринга

sbkernel[yymm].log - лог операций библиотеки sbrf.dll за yy - год, mm - месяц. Ведется библиотекой в случае установки параметра PinpadLog=1 в pinpad.ini.

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

12.12 18:47:41 SBRF: (PID 3400, thread 0x000019F8) Clear Начало обслуживания
12.12 18:47:41 SBRF: (PID 3400, thread 0x000019F8) SParam: Amount=36000 Сумма платежа в копейках
12.12 18:47:41 SBRF: (PID 3400, thread 0x000019F8) NFun: 4000 Вызов ф-ии оплаты
12.12 18:47:41 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:41 GATE: unlock:'00001788'
12.12 18:47:41 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:41 SBKRNL: Command = 4000, Amount = 360.00
12.12 18:47:41 SBKRNL: Open com 6 Здесь sbrf.dll по всей видимости начинает общение с пинпадом, т.к. тут открытие порта
12.12 18:47:52 SBKRNL: Close com 6 А здесь оно закончило общение (т.к. порт закрывается), ниже есть такие же моменты, отдельно я на них акцентироваться не буду
12.12 18:47:52 SBKRNL: Result = 0, Amount = 360.00, Card = '3886' Все прошло успешно (Result = 0)
12.12 18:47:52 GATE: unlock:'00001788'
12.12 18:47:52 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:52 GATE: unlock:'00001788'
12.12 18:47:52 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:52 GATE: unlock:'00001788'
12.12 18:47:52 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:52 GATE: unlock:'00001788'
12.12 18:47:52 SBRF: (PID 3400, thread 0x000019F8) Returns: 0 Здесь уже результат передается к нам в программу
12.12 18:47:52 SBRF: (PID 3400, thread 0x000019F8) NFun: 6003 Мы вызываем ф-ю 6003 (перевод платежа в неподтвержденное состояние) что бы если вдруг что, то при сверке итогов денежки человеку вернулись
12.12 18:47:52 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:52 SBKRNL: Command = 6003, Amount = 360.00, AuthCode = 278847
12.12 18:47:52 SBKRNL: Open com 6
12.12 18:47:52 SBKRNL: Close com 6
12.12 18:47:52 SBKRNL: Result = 0
12.12 18:47:52 GATE: unlock:'00001788'
12.12 18:47:52 GATE: lock:'00001788' 'UPOSWINMUTEX2'
12.12 18:47:52 GATE: unlock:'00001788'
12.12 18:47:52 SBRF: (PID 3400, thread 0x000019F8) Returns: 0 Выше опять таки работа с терминалом, а тут возврат результата нам
12.12 18:47:52 SBRF: (PID 3400, thread 0x000019F8) GParamString: RRN=934688849493
12.12 18:47:52 SBRF: (PID 3400, thread 0x000019F8) GParamString: Cheque1251 size=1284
12.12 18:47:52 SBRF: (PID 3400, thread 0x000019F8) Clear
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) Clear Здесь мы снова подключаемся к sbrf.dll после печати чека что бы передать подтверждение платежа (чуть ниже, ф-я 6001)
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) SParam: RRN=934688849493
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) SParam: Amount=36000
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) NFun: 6001
12.12 18:47:58 GATE: lock:'0000179C' 'UPOSWINMUTEX2'
12.12 18:47:58 GATE: unlock:'0000179C'
12.12 18:47:58 GATE: lock:'0000179C' 'UPOSWINMUTEX2'
12.12 18:47:58 SBKRNL: Command = 6001, Amount = 360.00
12.12 18:47:58 SBKRNL: Open com 6
12.12 18:47:58 SBKRNL: Close com 6
12.12 18:47:58 SBKRNL: Result = 0
12.12 18:47:58 GATE: unlock:'0000179C'
12.12 18:47:58 GATE: lock:'0000179C' 'UPOSWINMUTEX2'
12.12 18:47:58 GATE: unlock:'0000179C'
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) Returns: 0 sbrf.dll пообщалась с терминалом и вернула нам результат что всё хорошо
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) GParamString: RRN=934688849493
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) Clear
12.12 18:47:58 SBRF: (PID 3400, thread 0x000019F8) Clear
12.12 18:47:58 GATE: lock:'00000F2C' 'UPOSWINMUTEX2'
12.12 18:47:58 GATE: unlock:'00000F2C'

Описание

Если коротко то это сценарий оплаты с аварийной отменой, по сути мы даем в sbrf.dll три команды: 4000 (платеж), 6003 (перевести платеж в неподтвержденное состояние), 6001 (перевести платеж в подтвержденное состояние). Далее sbrf.dll общается с пинпадом сама, нам сообщая только результат операции (Result = 0, если не 0, то ошибка).

12.12 18:48:25 SBRF: (PID 3400, thread 0x000019F8) Clear
12.12 18:48:25 SBRF: (PID 3400, thread 0x000019F8) SParam: Amount=36000
12.12 18:48:25 SBRF: (PID 3400, thread 0x000019F8) NFun: 4000 Шлем оплату, после этого работает уже sbrf.dll
12.12 18:48:25 GATE: lock:'0000109C' 'UPOSWINMUTEX2'
12.12 18:48:25 GATE: unlock:'0000109C'
12.12 18:48:25 GATE: lock:'0000109C' 'UPOSWINMUTEX2'
12.12 18:48:25 SBKRNL: Command = 4000, Amount = 360.00
12.12 18:48:25 SBKRNL: Open com 6 Видим открытие порта, но дальше какой-то мрак, в логах нет ни закрытия порта, ни возвращения нам результата, ничего…
12.12 18:48:32 SBRF: (PID 3400, thread 0x000019F8) Clear
12.12 18:48:32 GATE: lock:'000011D8' 'UPOSWINMUTEX2'
12.12 18:48:32 GATE: unlock:'000011D8'
12.12 18:49:03 SBRF: (PID 3400, thread 0x000019F8) Clear
12.12 18:49:03 GATE: lock:'00001588' 'UPOSWINMUTEX2'
12.12 18:49:03 GATE: unlock:'00001588'
12.12 18:49:04 SBRF: (PID 3400, thread 0x000019F8) NFun: 6003 Тем не менее результат нам вернулся при чем был «успешным», т.к. здесь мы вызываем ф-ю 6003…
12.12 18:49:04 GATE: lock:'00000F34' 'UPOSWINMUTEX2'
12.12 18:49:04 SBKRNL: Command = 6003, Amount = 360.00
12.12 18:49:04 SBKRNL: Failed to open device \\.\COM6, err 5 И вот тут пошли проблемы с портом, sbrd.dll пытается его открыть, но не выходит (код ошибки 5, предположу что это код ошибки Windows, означает «доступ запрещен», т.е. 6 ком порт всё ещё открыт или не доступен по иным причинам).
12.12 18:49:04 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:05 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:05 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:05 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:06 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:06 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:07 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:07 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:07 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:08 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:08 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:09 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:09 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:09 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:10 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:10 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:11 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:11 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:12 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:12 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:12 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:13 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:13 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:14 SBKRNL: Failed to open device \\.\COM6, err 5
12.12 18:49:14 SBKRNL: Result = 99 Ну и под конец нам дают ошибку 99 — нет связи с пинпадом.
12.12 18:49:14 GATE: unlock:'00000F34'

Описание

В такой ситуации программа будет считать что операция не выполнена (даже если пинпад, на самом деле, её провёл). По сути данную проблему должны решать специалисты Сбербанка.

Коды ошибок Windows

  • public/doc/cashdesk/sberbank_regsvr32_sbrf.dll.txt
  • Последнее изменение: 05:32 10/02/2023
  • ili