Содержание

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

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

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

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

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

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

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

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

Настройка

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

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

pinpad.ini

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

Регистрация sbrf.dll

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

Настройки для pilot_nt.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 - вернула программе соответствующий код ошибки и программа считает операцию не выполненной.

Диагностические логи

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

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

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

Журнал операций

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

Пример разбора лога sbkernel[yymm].log

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