В современной розничной и дистанционной торговле оплата по QR-коду становится стандартом дефицита времени и удобства. Однако для программиста 1С и владельца бизнеса мало просто показать клиенту картинку с реквизитами. Основная задача — автоматически получить подтверждение от банка, что деньги списаны, чтобы система могла мгновенно отразить факт оплаты и пробить кассовый чек. Разберем подробно, как реализовать этот механизм, основываясь на технических возможностях API Сбера и встроенных инструментах 1С.
Прежде чем приступать к коду, проанализируем ситуацию: существует два принципиально разных способа работы с QR-кодами. Первый — это статический код (наклейка), в котором зашифрованы только реквизиты организации. В этом случае покупатель сам вводит сумму в приложении. Для автоматизации учета такой метод практически бесполезен, так как банк не может связать платеж с конкретным заказом в вашей базе без ручного поиска в реестре.
Для полноценной интеграции мы рассмотрим динамический QR-код. Схема работы выглядит следующим образом: 1С отправляет запрос в банк -> Банк создает уникальную транзакцию -> 1С получает ссылку на QR -> Покупатель платит -> 1С получает уведомление об успехе. Именно такой подход позволяет реализовать схему «без участия человека».
Выясним, какие инструменты предоставляет Сбер для разработчиков. Для получения информации о платеже в реальном времени используется SberPay QR API. Рассмотрим основные этапы взаимодействия системы 1С с банковским сервером.
Шаг 1: Создание заказа в системе банка
Для начала мы должны сообщить банку о намерении принять платеж. Для этого выполняется POST-запрос к API. В запросе передаются сумма, валюта, номер заказа из 1С и идентификатор терминала (TerminalID). В ответ Сбер возвращает уникальный идентификатор заказа в своей системе (orderId) и ссылку на QR-код.
Шаг 2: Получение статуса оплаты (Pull-модель)
Рассмотрим наиболее распространенный способ получения ответа — периодический опрос сервера банка. Ваша 1С после вывода QR-кода на экран начинает с интервалом в 2-3 секунды отправлять запросы на проверку статуса. Пример логики запроса в 1С может выглядеть так:
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("orderId", ИдентификаторЗаказаСбера);
ПараметрыЗапроса.Вставить("token", ВашТокенДоступа);
Результат = ВыполнитьЗапросКAPI("https://securepayments.sberbank.ru/payment/rest/getOrderStatusExtended.do", ПараметрыЗапроса);
Если Результат.orderStatus = 2 Тогда
// Статус 2 означает, что платеж успешно проведен
ЗафиксироватьОплатуВСистеме();
ПробитьЧекНаККМ();
КонецЕсли;
Проанализируем более продвинутый метод — использование Webhooks. Вместо того чтобы постоянно «дергать» банк запросами, вы можете настроить в личном кабинете СберБизнеса адрес вашего HTTP-сервиса, развернутого на стороне 1С. Как только клиент совершит оплату, сервер банка сам пришлет POST-запрос на ваш адрес.
Это решение требует наличия опубликованной базы 1С на веб-сервере (Apache или IIS) и настройки SSL-сертификата. Посмотрим на преимущества этого метода: мгновенная реакция системы, отсутствие лишнего трафика и нагрузки на базу опросами. Для фискализации удаленных оплат этот метод является рекомендуемым.
Если вы работаете в современных конфигурациях (УТ 11, КА 2, ERP, Розница 2/3), стоит обратить внимание на встроенные возможности. В составе Библиотеки подключаемого оборудования уже есть механизмы для работы с СБП и QR-кодами Сбербанка. Рассмотрим алгоритм настройки:
MerchantID и TerminalID, полученные от банка.При такой настройке типовые документы (например, «Чек ККМ» или «Эквайринговая операция») будут сами инициировать запрос к банку и ожидать ответа. Это избавляет программиста от необходимости писать низкоуровневые HTTP-запросы и парсить JSON-ответы вручную.
Помните, что получение ответа от банка — это лишь половина дела. Согласно 54-ФЗ, при оплате электронными средствами платежа вы обязаны сформировать чек. Если менеджер стоит рядом с клиентом, 1С должна отправить команду на локальный фискальный регистратор сразу после получения статуса «Успешно» (orderStatus = 2).
Если же вы отправляете QR-код клиенту дистанционно (через мессенджер или почту), рекомендуется использовать облачные кассы или настроенную в офисе кассу в режиме «очереди чеков». Как только API банка возвращает подтверждение, регламентное задание в 1С подхватывает этот факт и отправляет данные в ОФД.
Разберем ситуацию с отладкой. Сбербанк предоставляет тестовую среду (Sandbox). Мы настоятельно рекомендуем сначала протестировать получение ответа на тестовых данных, где вместо реальных денег используются имитации. Это позволит отладить обработку ошибок: например, когда у клиента недостаточно средств или он просто закрыл приложение, не совершив платеж. Ваша система должна корректно обрабатывать статусы «Отклонено» или «Просрочено», чтобы вовремя освобождать забронированный товар.
Таким образом, полноценная реализация «Плати QR» требует перехода от простых картинок к полноценному взаимодействию через API СберБизнес или использования механизмов БПО. Это обеспечивает надежность учета и полное соответствие законодательству.