Реализация приема платежей через Сбербанк в среде 1С — это комплексная задача, которая может быть решена двумя принципиально разными способами в зависимости от потребностей бизнеса. Первый способ — формирование статического QR-кода по ГОСТу для оплаты через мобильное приложение или банкомат (перевод по реквизитам). Второй способ — полноценный интернет-эквайринг с генерацией уникальной ссылки, переходом на платежную страницу и автоматическим подтверждением оплаты в базе 1С. Рассмотрим подробнее оба варианта, разберем технические нюансы работы с API и проанализируем примеры кода.
Этот метод часто используется в печатных формах квитанций или счетов. Он не создает «заказ» в системе Сбербанка мгновенно, а лишь кодирует реквизиты получателя и сумму. Клиент сканирует код в приложении банка, и данные подставляются в платежное поручение автоматически.
Для реализации этого механизма в 1С удобно использовать встроенные средства БСП (Библиотеки стандартных подсистем). Проанализируем ситуацию на примере формирования структуры данных. Сначала нам необходимо подготовить обязательные реквизиты организации и платежа:
&НаСервере
Функция ЗаполнитьСтруктуруРеквизитовQRКода(Объект)
пСтруктураРеквизитовQRКода = Новый Структура;
// Данные получателя
пСтруктураРеквизитовQRКода.Вставить("Name", СокрЛП(Объект.Организация.Наименование));
пСтруктураРеквизитовQRКода.Вставить("PersonalAcc", СокрЛП(Объект.РасчетныйСчет.НомерСчета));
пСтруктураРеквизитовQRКода.Вставить("BankName", СокрЛП(Объект.РасчетныйСчет.Банк.Наименование));
пСтруктураРеквизитовQRКода.Вставить("BIC", СокрЛП(Объект.РасчетныйСчет.Банк.Код));
пСтруктураРеквизитовQRКода.Вставить("CorrespAcc", СокрЛП(Объект.РасчетныйСчет.Банк.КоррСчет));
пСтруктураРеквизитовQRКода.Вставить("PayeeINN", СокрЛП(Объект.Организация.ИНН));
// Данные плательщика и сумма
пСтруктураРеквизитовQRКода.Вставить("LastName", "");
пСтруктураРеквизитовQRКода.Вставить("PayerAddress", "");
пСтруктураРеквизитовQRКода.Вставить("Purpose", "");
пСтруктураРеквизитовQRКода.Вставить("Sum", "0");
Возврат пСтруктураРеквизитовQRКода;
КонецФункции
Важным моментом является преобразование суммы. Сбербанк требует передачу суммы в копейках в виде целого числа без разделителей. Разберем функцию, которая корректно форматирует числовое значение в строку для QR-кода:
&НаСервере
Функция СуммаВКопейкахСтрокой(пКОплатеИтого)
// Убираем дробную часть и преобразуем в копейки
СуммаКопейки = пКОплатеИтого * 100;
лРезультат = Формат(СуммаКопейки, "ЧГ=0");
Возврат лРезультат;
КонецФункции
После подготовки структуры мы должны собрать строку по стандарту ST00012, где поля разделены символом «|». Затем используем метод УправлениеПечатью.ДанныеQRКода для получения двоичных данных картинки, которую можно вывести на форму или в табличный документ.
Если ваша задача — отправить клиенту ссылку в SMS или по e-mail, чтобы он мог оплатить заказ картой, SberPay или через СБП, необходимо использовать программный интерфейс платежного шлюза. В отличие от QR-кода, этот метод требует авторизации с использованием логина/пароля API или специального токена. Для предварительной отладки и проверки таких вызовов прямо в интерфейсе программы подойдёт обработка для тестирования REST API в среде 1С.
Процесс интеграции можно разделить на несколько этапов:
1. Регистрация заказа (метод register.do)
Для получения ссылки мы отправляем HTTPЗапрос к шлюзу Сбербанка. Выясним причину, по которой этот метод является основным: именно на этом этапе Сбербанк резервирует номер заказа и формирует уникальную страницу оплаты.
Основные параметры запроса:
userName / password — ваши учетные данные (тестовые или боевые).orderNumber — номер документа из 1С.amount — сумма в копейках.returnUrl — ссылка, куда вернется пользователь после оплаты (например, ваш сайт или техническая страница).description — назначение платежа, которое увидит клиент.Пример формирования запроса в 1С:
&НаСервере
Функция ПолучитьСсылкуНаОплату(НомерЗаказа, Сумма, Описание)
АдресШлюза = "securepayments.sberbank.ru"; // Для теста используйте sandbox.host.ru
Ресурс = "/payment/rest/register.do";
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("userName", "ваш_логин");
ПараметрыЗапроса.Вставить("password", "ваш_пароль");
ПараметрыЗапроса.Вставить("orderNumber", НомерЗаказа);
ПараметрыЗапроса.Вставить("amount", Сумма * 100);
ПараметрыЗапроса.Вставить("returnUrl", "https://your-site.ru/success");
ПараметрыЗапроса.Вставить("description", Описание);
// Формируем строку параметров
СтрокаПараметров = "";
Для Каждого Стр Из ПараметрыЗапроса Цикл
СтрокаПараметров = СтрокаПараметров + Стр.Ключ + "=" + Стр.Значение + "&";
КонецЦикла;
HTTPСоединение = Новый HTTPСоединение(АдресШлюза, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос(Ресурс + "?" + СтрокаПараметров);
Попытка
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку());
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
Если ДанныеОтвета.Свойство("formUrl") Тогда
Возврат ДанныеОтвета.formUrl; // Это и есть нужная ссылка
Иначе
Сообщить("Ошибка: " + ДанныеОтвета.errorMessage);
КонецЕсли;
КонецЕсли;
Исключение
Сообщить("Ошибка связи с сервером Сбербанка");
КонецПопытки;
Возврат Неопределено;
КонецФункции
2. Проверка статуса платежа
Просто отправить ссылку недостаточно. Проанализируем ситуацию: клиент может открыть ссылку, но не завершить оплату. Для синхронизации данных в 1С следует реализовать регламентное задание, которое будет опрашивать метод getOrderStatusExtended.do. В качестве параметра передается orderId (номер заказа в системе банка), полученный при регистрации.
Рассмотрим подробнее важный нюанс: если вы принимаете оплату от физических лиц, вы обязаны передавать данные для чека в налоговую. Сбербанк позволяет делать это автоматически через свои облачные кассы. Для этого в запрос register.do нужно добавить параметр orderBundle.
Это сложная структура в формате JSON, которая содержит:
customerDetails — контактные данные покупателя (email или телефон).cartItems — массив товаров, где для каждой позиции указывается name, quantity, itemAmount и tax (ставка НДС).В 1С для формирования такой структуры лучше всего использовать объект ЗаписьJSON и передавать его как один из параметров POST-запроса. Для проверки корректности формата и генерации кода работы со сложными структурами данных подойдёт инструмент для валидации JSON и генерации кода 1С.
При работе с защищенным соединением (HTTPS) в 1С часто возникают сложности с проверкой сертификатов. Выясним причину: Сбербанк может использовать сертификаты Минцифры или собственные удостоверяющие центры. Если 1С выдает ошибку «Удаленный узел не прошел проверку», необходимо:
ЗащищенноеСоединениеOpenSSL явно указать использование системного хранилища сертификатов.В современных конфигурациях 1С (например, в последних версиях УНФ или УТ 11) механизмы оплаты через СБП уже встроены в типовой функционал. Если же вы пишете свою интеграцию через API Сбербанка, обратите внимание, что метод register.do по умолчанию генерирует страницу, где клиент сам может выбрать способ оплаты: картой или через SberPay. Это значительно повышает конверсию, так как покупателю не нужно вводить данные карты вручную — достаточно подтвердить пуш-уведомление в приложении Сбербанк Онлайн.
Таким образом, для реализации задачи в 1С необходимо четко определить: нужен ли вам простой QR-код для реквизитов (статический) или вы строите систему автоматизированных продаж с контролем статусов (динамические ссылки). Второй вариант сложнее в разработке, но позволяет полностью исключить ручной труд менеджера по проверке выписок банка. В сценариях, где прямая интеграция через API затруднена, использование программных роботов для проверки информации также позволяет роботизировать рутинные операции персонала по контролю данных.