При интеграции платежных решений часто возникают ситуации, когда стандартные операции оплаты проходят успешно, но специфические функции, такие как возврат через Систему Быстрых Платежей (СБП), вызывают затруднения. Рассмотрим ситуацию, когда при использовании связки из терминала Ingenico Lane3000, ПО Arcus 2 и конфигурации 1С:Розница 2.3 (с банком ПСБ) возврат по СБП не срабатывает привычным образом.
Основная сложность заключается в том, что при попытке оформления возврата терминал может не реагировать на функциональные клавиши (например, F2 для выбора СБП) или требовать приложить физическую карту, игнорируя цифровую природу транзакции СБП. Разберем причины этого поведения и найдем способы решения проблемы.
Проанализируем механику взаимодействия 1С и программного обеспечения терминала. В типовых сценариях 1С через драйвер IngenicoDriver1C.dll посылает на терминал стандартную команду возврата. Для системы эквайринга это операция с кодом 11 (возврат товара по карте). Однако для СБП в протоколе Arcus 2 часто выделяется отдельный код операции — 110.
Когда драйвер 1С версии 1.0.0.2 отправляет команду, терминал переходит в режим ожидания карты, так как он получил инструкцию именно для карточного возврата. Программная кнопка выбора СБП в этот момент может быть заблокирована на уровне логики драйвера терминала. Для корректной работы нам необходимо заставить систему отправлять правильный идентификатор операции или подготовить окружение Arcus 2 к приему команд.
Если штатный механизм 1С не позволяет передать нужный код операции, мы можем воспользоваться встроенной утилитой Arcus 2 для прямой отправки команды в банк. Рассмотрим пример использования CommandLineTool.exe. Это решение подходит, когда нужно выполнить возврат «здесь и сейчас», минуя ограничения драйвера 1С.
Для реализации этого метода подготовим исполняемый файл (bat-ник) со следующим содержанием:
C:\Arcus2\CommandLineTool\BIN\CommandLineTool.exe /o3 /a12345 /z12345 /c643
Разберем параметры этой команды:
/o3 — индекс операции в конфигурационном файле OPS.ini./a12345 — сумма возврата (в копейках, где 12345 — это 123 рубля 45 копеек)./z12345 — номер чека или идентификатор транзакции (зависит от настроек банка)./c643 — код валюты (российский рубль).Этот способ позволяет выполнить операцию напрямую через терминал, после чего в 1С операцию возврата можно будет закрыть как «оплату по чеку» или через ручной ввод данных эквайринговой операции.
Проанализируем возможность изменения поведения самого терминала через настройки Arcus 2. Основным файлом, отвечающим за список доступных операций, является C:\Arcus2\INI\OPS.ini. По умолчанию в нем прописаны стандартные операции:
[OPS]
2=2,3,ОТМЕНА ПОСЛ.
3=1,11,ВОЗВРАТ ТОВАРА
Для того чтобы терминал понимал, что операция возврата должна идти через СБП, необходимо изменить код операции с 11 на 110. Однако, если мы сделаем это статично, мы потеряем возможность делать возвраты по обычным картам. Рассмотрим вариант временной подмены («костыля»), который обсуждался на форумах:
Перед пробитием чека на возврат в 1С программно (с помощью встроенного языка 1С) открывается файл OPS.ini, в нем строка 3=1,11,ВОЗВРАТ ТОВАРА заменяется на 3=1,110,Возврат СБП. После завершения операции настройки возвращаются в исходное состояние. Это позволяет использовать стандартную кнопку возврата в 1С для работы с СБП.
Также важно проверить файл CASH.INI. Для стабильной работы протокола обмена убедимся, что параметры настроены следующим образом:
XML_EXCHANGE=1 (если используется обмен данными через XML-структуры);CheckServiceCode=1 (позволяет терминалу более гибко реагировать на типы платежных систем).Наиболее правильным и современным способом решения проблемы в 1С является разделение логики на уровне подключаемого оборудования. Вместо того чтобы пытаться уместить две разные технологии (карты и СБП) в одну настройку, мы создадим в справочнике Подключаемое оборудование две записи для одного и того же физического терминала. При необходимости работы с другой моделью можно использовать расширение для управления выбором способа оплаты на терминалах PAX D230.
Пошаговый алгоритм настройки:
110.Теперь при попытке возврата по виду оплаты «СБП» 1С сама отправит в Arcus 2 нужный код операции, и терминал автоматически сформирует запрос на возврат через Систему Быстрых Платежей, не требуя прикладывания карты.
При активных манипуляциях с настройками и кодами операций пользователи часто сталкиваются с сообщением «Ошибка MAC». Выясним причину: эта ошибка означает рассинхронизацию ключей безопасности между терминалом и банковским хостом. Она часто возникает при попытке выполнить операцию, которая не была корректно инициализирована в текущей смене.
Для исправления ситуации выполним следующие действия:
C:\Arcus2\DATA.CommandLineTool.exe.Рассмотрим рекомендации технической поддержки. Проблема с отсутствием выбора способа возврата была массовой в версиях драйвера IngenicoDriver1C.dll ниже 1.0.0.4. В современных релизах БПО (Библиотека подключаемого оборудования), начиная с версии 3.1.2, разработчики добавили полноценную поддержку тега «Тип оплаты».
Если ваша конфигурация позволяет выполнить обновление, рекомендуем перейти на версию драйвера 1.0.0.6. В ней реализована возможность разделения потоков оплаты и возврата на уровне настроек драйвера без необходимости редактировать текстовые файлы конфигурации .ini. Также убедитесь, что версия ПО Arcus 2 не ниже 2.0.0.41, так как именно в этой версии была стабилизирована работа с протоколами СБП для банка ПСБ.
Важный момент при возвратах через ПСБ: всегда проверяйте передачу RRN (Retrieval Reference Number). Без этого идентификатора банк может отклонить операцию возврата с ошибкой «Чек не найден», даже если технически соединение с СБП установлено верно. В 1С RRN обычно хранится в данных эквайринговой операции и должен автоматически подставляться драйвером при оформлении возврата на основании чека продажи.