Ошибки при подключении эквайринга от Сбербанка к 1С 8: Недостаточно фактических параметров; Ошибка эквайринговой системы 4309
Описание ошибки:
При подключении пинпада Verifone VX820 от Сбербанка и при попытке осуществить платеж возникает ошибка в 1С: Управление торговлей 10.3.13 на платформе 1С: Предприятие 8 версии 8.3:
{Внешняя Обработка.СберБанкЭквайринговаяСистема.МодульОбъекта(365)}: Недостаточно фактических параметров
Найденные решения:
В данном случае, если немного углубиться в анатомию ошибки по описанию, становится понятно, что обработка, установленная в 1С (по умолчанию это SberBankES_v2.epf) и обеспечивающая работу с банковским терминалом, отвечающим за эквайринг, обращается к dll-компоненте банка и передает в нее меньше параметров, чем требуется для работы компоненты. Поэтому необходимо запросить у банка версию файла SBRFCOM.dll, поддерживающую работу с 3-мя параметрами. По умолчаню у банка может быть компонента, в которую должно передаваться 7 параметров. Специалисты банка комментируют тем, что в с более новыми версиями 1С работает компонента, в которую передается 7-ми параметров, а а более старые работают на версии, поддерживающей передачу всего лишь 3-х параметров.
В принципе на этом проблема должна решиться. Но в моей практике даже после замены на правильную версию dll-файла, работа с эквайринговой системой пинпада Verifone VX820 не была обеспечена по причине возникновения новой ошибки:
Ошибка эквайринговой системы 4309
Перебор более ранних версий ПО и dll-файлов от банка не привел ни к каким результатам. Но по совершенной случайности было решено на крайний случай сделать сброс временных файлов, связанных с базой, что делается за счет удаления и добавления базы в список базы окна запуска 1С: Предприяите 8. Особенно к этому подтолкнул тот факт, что до переустановки ПО банка вместе со сменой пинпада, после которого и возникла начальная ошибка, предущий пинпад Verifone VX810 все таки работал с 1С без особых нареканий. В результате очистки временных файлов базы посредством, как уже было замечено, удаления базы из списка и баз и повторного добавления немного под другим имененем, ошибка, можно сказать, чудесным образом пропала и работа с эквайринговой системой Сбербанка была полностью восстановлена.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
04-09-2016
Журавлев А.С.
(www.azhur-c.ru)
Опубликовал | Дата 1 июня, 2011
Сегодня разбирался, как подключить систему оплаты по международным банковским картам к 1С, точнее, как подключить эквайринговую систему Сбербанка к УТ 8.1.
Попробую описать этот процесс по шагам:
1. нужно получить у работников сбербанка следующие файлы:
- SB_KERNEL.DLL
- GATE.DLL
- SBRFCOM.dll
- LOADPARM.EXE
- RRDK.R
- R003.R
- PARAMS.TLV
2. Скопировать их в каталог «C:Program Files1cv81bin» и зарегистрировать библиотеку SBRFCom.dll с помощью команды (regsvr32 «C:Program Files1cv81binSBRFCOM.DLL»).
3. Подключить терминал считывания карт через USB или COM порт.
4. Выполнить загрузку настроечных параметров библиотеки. Для этого запустить программу LOADPARM.EXE:
зайти в меню «Служебные операции Настройки Техобслуживание Пароль ………… Загрузка параметров», выбрать файл PARAMS.TLV и дождаться окончания загрузки (пароль вам должен сказать работник банка).
5. Открываем УТ. Далее, открываем пункт меню: «СервисТорговое оборудованиеПомощник подключения и настройки торгового оборудования». Нажимаем далее:
Выбираем пункт «Эквайринговая система» и нажимаем «Далее».
Здесь выбираем СБ РФ «Эквайринговая система» и нажимаем «Далее».
Если здесь нет этого пункта, можно попробовать загрузить его вручную. Здесь же выбираем пункт «Добавить новую обработку обслуживания», выбираем каталог «C:Program Files1cv81tmplts1ctrade10_3_7_9TradeWareEpf» (у вас вместо «10_3_7_9» будет номер версии последнего обновления УТ 8.1). Нажимаем получить список и если нужная обработка в этом каталоге есть — то появиться нужный нам пункт «СБ РФ «Эквайринговая система». Файл обработки называется SberBankES_v2.epf.
Если все сделано верно, должно появиться окно Настройки параметров Эквайринговой системы:
При этом, может выдаваться ошибка говорящая о невозможности проверки версии драйвера. Это нормально, т.к. в программном коде написано, что пока такая проверка не реализовано в драйвере:
Нажимаем «ОК» и
Установка завершена. Больше ничего устанавливать не надо, поэтому нажимаем «Нет».
Теперь проверим, как это работает. Заходим в меню «СервисТорговое оборудованиеУправление Эквайринговой системой»:
Нажимаем кнопку «Оплатить картой», вводим сумму в появившемся окне и нажимаем «Оплату платежа». После чего система попросит вставить карту в терминал для чтения карт. Естественно, что терминал должн быть подключен. Кроме того, обязательно должен быть подключен Фискальный регистратор. Иначе система работать не будет.
SBRFCOM.dll ILanguageExtender вызов метода
От: |
pumpurumer |
||
Дата: | 12.05.12 08:05 | ||
Оценка: |
Есть компонента для интеграции с эквайриноговой системой сбербанка.
В ней реализован интерфейс ILanguageExtender (Эта компонента для интеграции с 1с).
Все методы из компаненты предлогается вызывать через этот интерфейс, все хорошо только у меня это не получается.
Пробовал так:
var cl = new SBRFCOMLib.SBRFCOMClass();
object res = null;
Array ps = Array.CreateInstance(typeof(object), 3);
ps.SetValue(123, 0);
ps.SetValue(null, 1);
ps.SetValue(null, 2);
cl.CallAsFunc(0, ref res, ref ps);
Выдает AccessViolationException, {«Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.»}
Пробывал в различных вариантах ps и res
Нашел упоминание про тип OleVariant
Описание метода:
public virtual void CallAsFunc(int lMethodNum, ref object pvarRetValue, ref Array paParams);
Описание метода на C# из своей внешней компоненты:
public void CallAsFunc(int methodNum, [MarshalAs(UnmanagedType.Struct)] ref object retValue, [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_VARIANT)] ref object[] pParams)
Re: SBRFCOM.dll ILanguageExtender вызов метода
От: |
HowardLovekraft |
||
Дата: | 12.05.12 11:16 | ||
Оценка: |
Здравствуйте, pumpurumer, Вы писали:
P>skipped
У Сбербанка есть SBRF.dll, которая содержит в себе Automation-обертку над их нативным API. ProgId обертки — «SBRFSRV.Server».
Зачем эти анальные страдания через ILanguageExtender, когда можно работать через относительно человеческий IDispatch?
От: |
HowardLovekraft |
||
Дата: | 12.05.12 11:20 | ||
Оценка: |
Дополнение.
Эта SBRF.dll входит в сбербанковский SB Pilot (это то, что работает с пинпадом).
От: |
pumpurumer |
||
Дата: | 12.05.12 11:54 | ||
Оценка: |
Здравствуйте, HowardLovekraft, Вы писали:
HL>Дополнение.
HL>Эта SBRF.dll входит в сбербанковский SB Pilot (это то, что работает с пинпадом).
Подключил SBRFSRV.Server
public interface IServer
{
[DispId(4)]
void Clear();
[DispId(3)]
object GParam(string Name);
[DispId(5)]
string GParamString(string Name);
[DispId(1)]
int NFun(int func);
[DispId(2)]
void SParam(string Name, object Value);
}
Как с этим работать? Я так предполагаю в стринговые параметры какие-то специально сформированные запросы? тогда где взять документацию.
От: |
HowardLovekraft |
||
Дата: | 12.05.12 12:12 | ||
Оценка: |
Здравствуйте, pumpurumer, Вы писали:
P>Как с этим работать?
Ну, вообще, они должны были ее предоставить. Там ничего сверхсекретного нет…
В принципе, я могу выложить примеры кода для тех операций, которые реализовывал (продажа, возврат, закрытие дня).
Только я это делал задолго до появления dynamic, поэтому там будет не очень красивое позднее связывание на шарпе.
От: |
pumpurumer |
||
Дата: | 12.05.12 12:38 | ||
Оценка: |
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, pumpurumer, Вы писали:
P>>Как с этим работать?
HL>Ну, вообще, они должны были ее предоставить. Там ничего сверхсекретного нет…
HL>В принципе, я могу выложить примеры кода для тех операций, которые реализовывал (продажа, возврат, закрытие дня).
HL>Только я это делал задолго до появления dynamic, поэтому там будет не очень красивое позднее связывание на шарпе.
Выкладывайте. Буду очень сильно рад или на почту kdcs gavgav yandex.ru
От: |
HowardLovekraft |
||
Дата: | 12.05.12 19:43 | ||
Оценка: |
Здравствуйте, pumpurumer, Вы писали:
P>Выкладывайте
ОК, может быть, кому-нибудь еще пригодится.
Обертка над COM-объектом (сейчас бы я это переписал с использованием dynamic, было бы покрасивее):
Использование обертки.
I) Общая последовательность выполнения операций.
Операции выполняются в рамках «дня». Если ничего не поменяли, день — это 24 часа с момента выполнения первой операции (4000, 4002, 4003). Минимум раз в сутки нужно выполнить операцию 6000 и закрыть «день». SB Pilot это контролирует, и, если забыли, на очередную попытку выполнения финансовой операции вернет соответствующий код ошибки (и выдаст сообщение на экран пинпада).
II) Общая последовательность действий для выполнения какой-либо операции:
1) очистили внутренний буфер параметров с помощью метода Clear;
2) установили требуемые входные параметры операции через свойство-индексатор;
3) выполнили операцию с помощью метода Execute. Если он вернул 0, то операция выполнена успешно. Иначе возвращаемое значение — это код ошибки из спецификации SB Pilot;
4) прочитали нужные выходные параметры операции через свойство-индексатор.
III) Параметры (приведены наиболее значимые).
1) Входные.
Для операций 4000, 4002, 4003:
«Amount» — сумма операции в МДЕ (копейках), Int32.
«Track2» — данные второй дорожки магнитной полосы карты, если карта читается не на пинпаде, иначе параметр не задается, String.
«Department» — Int32. SB Pilot умеет выполнять транзакции для разных мерчантов (организаций) на одном пинпаде. Чтобы определить, для какого мерчанта будет выполняться транзакция, используется параметр «Department». Фактически, это — индекс в одном из списков в настройках SB Pilot. Первый мерчант (он должен быть всегда) имеет индекс 0.
«CardType» — тип карты, Int32. 0 — тип определяется автоматически пинпадом.
Для операций 4002 и 4003, по идее, еще нужен параметр «RRN» — ссылочный номер оригинальной операции (нужно проверить, не помню, вполне может работать и без него, Сбербанк — такой Сбербанк…).
Для операции 6000 входных параметров нет.
2) Выходные.
Для операций 4000, 4002, 4003:
«AuthCode» — код авторизации.
«TrxDate»/»TrxTime» — дата/время операции (по часам авторизационного хоста).
«ClientExpiryDate» — срок действия карты.
«ClientCard» — данные карты.
«TermNum» — номер терминала.
«CardName» — имя владельца карты.
«CardType» — тип карты
«RRN» — ссылочный номер.
Для операции 6000:
«TrxDate»/»TrxTime» — дата/время операции (по часам авторизационного хоста).
«TermNum» — номер терминала.
Пример:
Код выдран из рабочего решения (поудалял не относящееся к сути и атавизмы типа работы с платежной системой Сберкарт), могут быть мелкие неточности.
Еще стоит обратить внимание на различие операций 4002 и 4003 — если раньше не работали с решениями для эквайринга, это не очевидно: отмена снимает блокировку определенной суммы, заблокированной операцией с кодом 4000, делает это моментально, но только на всю сумму и только в течение текущего «дня». Возврат с точки зрения зачисления денег на счет клиента работает гораздо медленней (до нескольких дней), но позволяет возвращать за любой «день» и частями.
Это нужно учитывать при реализации бизнес-логики, работающей с эквайрингом: не стоит все возвратные (с т.з. вашего софта) действия реализовывать с помощью операции 4002 (возврат), вас проклянут.
Re[2]: SBRFCOM.dll ILanguageExtender вызов метода
От: |
DarthSidius |
||
Дата: | 13.05.12 02:02 | ||
Оценка: |
Здравствуйте, HowardLovekraft, Вы писали:
HL>Зачем эти анальные страдания через ILanguageExtender, когда можно работать через относительно человеческий IDispatch?
Одноэсина всегда понимала IDispatch. ILanguageExtender вобще нахрен не нужен — зачем этот деревянный велосипед?
… << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
♠♠♥♠♠♦♥
Re[3]: SBRFCOM.dll ILanguageExtender вызов метода
От: |
HowardLovekraft |
||
Дата: | 13.05.12 17:11 | ||
Оценка: |
Здравствуйте, DarthSidius, Вы писали:
DS>Одноэсина всегда понимала IDispatch. ILanguageExtender вобще нахрен не нужен — зачем этот деревянный велосипед?
Не нужен, мне это доказывать не надо.
Но 1с считает его православным, кошерным и халяльным одновременно.
Видимо потому, что через IDispatch сложно реализовать поддержку наименований свойств и методов латиницей и кириллицей одновременно.
От: |
pumpurumer |
||
Дата: | 15.05.12 10:03 | ||
Оценка: |
Спасибо вам огромное!
Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.
От: |
HowardLovekraft |
||
Дата: | 15.05.12 10:20 | ||
Оценка: |
Здравствуйте, pumpurumer, Вы писали:
P>Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.
Либо печатать самому (все реквизиты для этого есть, в свое время так и делал), либо взять документацию и проверить возможность вытаскивания строк чека из выходных параметров операции. По второму варианту, я, к сожалению, вам ничего подсказать не смогу — нет доступа к документации.
От: |
pumpurumer |
||
Дата: | 15.05.12 13:55 | ||
Оценка: |
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, pumpurumer, Вы писали:
P>>Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.
HL>Либо печатать самому (все реквизиты для этого есть, в свое время так и делал), либо взять документацию и проверить возможность вытаскивания строк чека из выходных параметров операции. По второму варианту, я, к сожалению, вам ничего подсказать не смогу — нет доступа к документации.
Самостоятельно формат печати реализовали у себя.
Касательно документации на либу:
В сбербанке сказали писать официально письмо на имя управляюшего филиалом по региону, в котором подробно описывать суть проблемы и требуемую документацию — они предоставляют все что вы запросили.
sbrf.dll c# .net sbrfcom.dll эквайринг IDispatch
От: |
pumpurumer |
||
Дата: | 28.02.13 19:26 | ||
Оценка: |
Здравствуйте, pumpurumer, Вы писали:
P>Здравствуйте, HowardLovekraft, Вы писали:
HL>>Здравствуйте, pumpurumer, Вы писали:
P>>>Появился вопрос — откуда брать текст для чека? Чек транзакции я имею в виду.
HL>>Либо печатать самому (все реквизиты для этого есть, в свое время так и делал), либо взять документацию и проверить возможность вытаскивания строк чека из выходных параметров операции. По второму варианту, я, к сожалению, вам ничего подсказать не смогу — нет доступа к документации.
P>Самостоятельно формат печати реализовали у себя.
P>Касательно документации на либу:
P>В сбербанке сказали писать официально письмо на имя управляюшего филиалом по региону, в котором подробно описывать суть проблемы и требуемую документацию — они предоставляют все что вы запросили.
P>sbrf.dll c# .net sbrfcom.dll эквайринг IDispatch
Я получил документацию на библиотеку sbrf.dll sb_pilot.dll
Выкладываю.
Надеюсь кому-то пригодится.
http://files.rsdn.ru/76553/%d0%98%d0%bd%d1%82%d0%b5%d0%b3%d1%80%d0%b0%d1%86%d0%b8%d1%8f%20%d1%81%20%d0%9a%d0%9a%d0%9c%20%d1%87%d0%b5%d1%80%d0%b5%d0%b7%20%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d1%83%20PILOT_NT.rtf
http://files.rsdn.ru/76553/Short_ole_sbrf.rtf
http://files.rsdn.ru/76553/sb_pilot_linux.doc
http://files.rsdn.ru/76553/sb_pilot.doc
http://files.rsdn.ru/76553/ReadTrack2.doc
http://files.rsdn.ru/76553/ole_sbrf.rtf
http://files.rsdn.ru/76553/lib_win.rtf
http://files.rsdn.ru/76553/1C.doc
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Добрый день. Для эквайринга 1с потребовалось оплата одной покупки по двум разным фирмам. ЕСть ли возможность это осуществить через единственную операцию ввода пин-кода карты оплаты?
Обычно в магазине несколько раз вводишь пинкод. Иначе получается можно списать сколько угодно с карточки
Т.е. ввод пинкода дважды — нормальная практика?
Две фирмы — это две продажи, транзакции, а значит и два раза пин-код надо вводить.
Что значит: по двум фирмам? Сумма разбивается на две или одна и та же сумма проходит по двум фирмам?
Установка карты производится в один эквайринговый терминал, в который прописаны 2 организации.
Суммы разные. Т.е, допустим, хлеб, молоко по одному юр лицу, а алкоголь — по другому.
Тогда, должно быть два чека.
У вас в магазине 2 разные организации а касса одна? Как интересно. Может вам просто интеркампани нужна?
1 кассовый компьютер, 1 кассовое ПО, 2 фискальных регистратора, 1 терминал эквайринга Сбербанка на 2 юридических лица. Можно ли сделать так, чтобы клиент вводил пинкод 1 раз?
Вот аннотация к эквайрингу Сбербанка: «Компонент SBRFCOM.DLL для стыковки карточной библиотеки Сбербанка с 1С ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Для интеграции карточной библиотеки Сбербанка с системой 1С необходимо зарегистрировать в системе 1С компоненту SBRFCOM.DLL. Компонента эта содержит метод ОплатитьПлатежнойКартой и еще ряд вспомогательных методов. Первая версия компоненты SBRFCOM.DLL была очень простой, и в ней метод ОплатитьПлатежнойКартой имел всего 3 параметра: Сумма, КодRRN и КодАвторизации. Затем возникла необходимость расширить список параметров. В новой версии компонента SBRFCOM.DLL имела в методе ОплатитьПлатежнойКартой уже 7 параметров, и была очевидным образом несовместима с предыдущей версией.» Вот описание с 7-ю параметрами я не вижу. Какие 7 параметров передаются?
>>Т.е. ввод пинкода дважды — нормальная практика? Да, это нормальная практика, а как по другому? 2 фирмы, 2 разных счета, 2 продажи на разных ФР, 2 разных чека
Pin-код вводится в терминал оплаты и никуда больше не передаётся в открытом виде — терминал оплаты регистрируется на одну и только одну фирму. То есть, или использовать приём оплаты на одну фирму за другую (как агента по приёму платежей) или у вас будет два терминала и две фирмы — тогда клиент будет не только вводить два раза pin-код, но и вставлять карты в разные терминалы.
Тоже было бы интересно описание 7 параметров. У меня есть описание, где 3 параметра только. А у терминала два номера что ли?
В типовых нет, руками можно реализовать хоть +100500 фискальных чеков. Но учти, что один пин — одна транзакция. У тебя будет один слип-чек на кучу фискальных. Если это не проблема, то не вижу причин для сомнений.
+ Терминал привязан с одной организации. Эквайринговая выручка упадет на р/с этой фирмы. Гл.бух в курсе этого?
VeryFone 8x позволяет привязывать один терминал к двум разным организациям через отделы внутри терминала. Но придется направления денег разруливать через ПО. Хотя если не передавать отдел, то аппарат сам запросит номер отдела. И соответственно деньги упадут в правильную организацию.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Не так давно потребовалось срочно реализовать эквайринг от Сбербанка в одно самописной конфигурации. За основу была взята соответствующая часть конфигурации «Библиотека подключаемого оборудования» от 1С, из которой я выкинул все лишнее. Отмечу, что «лишними» те или иные части кода были признаны исходя из особенностей задачи и моего субъективного мнения, то есть в Вашем случае это может быть не так.
Отдельно отмечу, что эквайринг — тема очень ответственная, ибо напрямую связана с деньгами (можно, например, продать товар и не взять за него денег), поэтому прошу быть предельно осторожными и не стесняться добавлять всевозможные проверки.
Ну и напоследок напомню, что все написанное ниже приводится в ознакомительных целях и использовать эту информацию Вы можете исключительно на свой страх и риск.
Содержание
- Регистрация и подключение библиотеки
- Вспомогательные функции SBRFCOM
- Основные функции SBRFCOM
- Сверка итогов
Регистрация и подключение библиотеки
Итак, для работы нам нужно зарегистрировать в системе две DLL-ки: SBRF.dll и SBRFCOM.dll. Библиотека SBRFCOM.dll бывает в двух вариантах: старый (3 параметра) и новый (7 параметров), нам естественно нужен новый.
Получить обе эти DLL-ки можно у того специально обученного человека из Сбербанка, который придет настраивать терминал. Регистрацию библиотек в системе обычно делает все тот же сотрудник Сбербанка, но если этого по какой-то причине не произошло, то библиотеки нужно зарегистрировать самостоятельно, из командной строки при помощи утилиты regsvr32 (командную строку запустите от имени администратора):
Подключение зарегистрированной библиотеки необходимо выполнить перед совершением каких-либо операций с эквайринговым терминалом, делается это примерно так:
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 Тогда СлипЧек = СлипЧек + «[cut]» + Символы.ПС + СтрокаЧека; Иначе СлипЧек = СлипЧек + СтрокаЧека + ?(Индекс = ОбъектДрайвераАвторизатора.КоличествоСтрокСлипЧека, «», Символ(13) + Символ(10)); КонецЕсли; Иначе Сообщить(«Ошибка при получении строк слип-чека»); Результат = Ложь; КонецЕсли; КонецЦикла; Если Результат Тогда КопииСлипЧека = «»; Для Индекс = 1 По ОбъектДрайвераАвторизатора.КоличествоКопийСлипЧека Цикл КопииСлипЧека = КопииСлипЧека + СлипЧек + ?(Индекс = ОбъектДрайвераАвторизатора.КоличествоКопийСлипЧека, «», Символы.ПС + «[cut]» + Символы.ПС); КонецЦикла; СлипЧек = КопииСлипЧека; КонецЕсли; Возврат Результат; КонецФункции |
Основные функции 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.
Загрузка…
Ошибки при подключении эквайринга от Сбербанка к 1С 8: Недостаточно фактических параметров; Ошибка эквайринговой системы 4309
Описание ошибки:
При подключении пинпада Verifone VX820 от Сбербанка и при попытке осуществить платеж возникает ошибка в 1С: Управление торговлей 10.3.13 на платформе 1С: Предприятие 8 версии 8.3:
{Внешняя Обработка.СберБанкЭквайринговаяСистема.МодульОбъекта(365)}: Недостаточно фактических параметров
Найденные решения:
В данном случае, если немного углубиться в анатомию ошибки по описанию, становится понятно, что обработка, установленная в 1С (по умолчанию это SberBankES_v2.epf) и обеспечивающая работу с банковским терминалом, отвечающим за эквайринг, обращается к dll-компоненте банка и передает в нее меньше параметров, чем требуется для работы компоненты. Поэтому необходимо запросить у банка версию файла SBRFCOM.dll, поддерживающую работу с 3-мя параметрами. По умолчаню у банка может быть компонента, в которую должно передаваться 7 параметров. Специалисты банка комментируют тем, что в с более новыми версиями 1С работает компонента, в которую передается 7-ми параметров, а а более старые работают на версии, поддерживающей передачу всего лишь 3-х параметров.
В принципе на этом проблема должна решиться. Но в моей практике даже после замены на правильную версию dll-файла, работа с эквайринговой системой пинпада Verifone VX820 не была обеспечена по причине возникновения новой ошибки:
Ошибка эквайринговой системы 4309
Перебор более ранних версий ПО и dll-файлов от банка не привел ни к каким результатам. Но по совершенной случайности было решено на крайний случай сделать сброс временных файлов, связанных с базой, что делается за счет удаления и добавления базы в список базы окна запуска 1С: Предприяите 8. Особенно к этому подтолкнул тот факт, что до переустановки ПО банка вместе со сменой пинпада, после которого и возникла начальная ошибка, предущий пинпад Verifone VX810 все таки работал с 1С без особых нареканий. В результате очистки временных файлов базы посредством, как уже было замечено, удаления базы из списка и баз и повторного добавления немного под другим имененем, ошибка, можно сказать, чудесным образом пропала и работа с эквайринговой системой Сбербанка была полностью восстановлена.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
04-09-2016
Журавлев А.С.
(www.azhur-c.ru)
Доброго времени, уважаемые!
Подключаю пинпад впервые — возникли проблемы. Помогите, пожалуйста, советом.
1С Комплексная автоматизация 1.1.55.2 через RDP. Нужные библиотеки, оставленные работником Сбербанка, зарегистрированы. На сервере проверку итогов через LoadParm.exe проходит. В 1с добавлена эквайринговая система. При проверке подключения оборудования в 1с пишет:
«СБ РФ: Эквайринговая система»:
Внимание! Невозможно определить версию драйвера.
Требуемая версия: 1.0.0.1
Корректная работа драйвера не гарантируется
У SBRFCOM.dll версия 1.0.0.1.
Пытаюсь провести оплату документом «Оплата от покупателя платежной картой» — выдает ошибку:
{ВнешняяОбработка.СберБанкЭквайринговаяСистема.МодульОбъекта(355)}: Недостаточно фактических параметров
Ответ = Объект.Драйвер.ОплатитьПлатежнойКартой(мСумма, КодRRN, КодАвторизации);
Как можно исправить? Может я что-то не так делаю?