Как интегрировать API Сбербанка для приема QR-платежей в 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

Интеграция с платежными API банков — это задача, требующая предельной точности в формировании запросов и заголовков. В процессе работы разработчики часто сталкиваются с ошибками авторизации и некорректным форматом данных. Давайте разберем по шагам, как правильно реализовать взаимодействие с API Сбербанка, основываясь на опыте решения подобных задач.

Этап 1: Получение авторизационного токена

Первое, с чем мы сталкиваемся — это получение Access Token. Важно помнить, что авторизация происходит по схеме Basic, где логином и паролем выступают ClientId и SecretId. Главная ловушка здесь — наличие лишних символов переноса строки при кодировании в Base64.

Рассмотрим, как правильно сформировать строку авторизации:


СтрокаАвторизации = Имя + ":" + Пароль;
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8, Ложь);
Base64Логин = "Basic " + Base64Строка(ДвоичныеДанные);
// Важно убедиться, что Base64Строка не содержит переносов строк

При отправке запроса на получение токена используйте тип контента application/x-www-form-urlencoded. Если вы получаете ошибку invalid_scope, это означает, что вы либо передаете неверный scope, либо для вашего ClientId не настроены права в личном кабинете. Попробуйте использовать актуальный scope, например: https://api.sberbank.ru/qr/order.create.

Этап 2: Формирование запроса на создание заказа

Когда токен получен, следующим шагом будет создание заказа через POST-запрос. Здесь важно правильно сформировать JSON-структуру тела запроса. Многие ошибки (400 Bad Request) возникают из-за несоблюдения схемы JSON или неверной вложенности полей.

Разберем структуру создания заказа:


СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("rq_uid", СтрЗаменить(Новый УникальныйИдентификатор, "-", ""));
СтруктураПараметров.Вставить("rq_tm", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + "T" + Формат(ТекущаяДата(), "ДЛФ=T") + "Z");
СтруктураПараметров.Вставить("order_number", НомерЗаказа);
СтруктураПараметров.Вставить("order_sum", Сумма * 100);
СтруктураПараметров.Вставить("currency", "643");
СтруктураПараметров.Вставить("id_qr", ИдентификаторТерминала);
// Используйте ЗаписьJSON для корректного формирования строки
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров);
ТелоЗапроса = ЗаписьJSON.Закрыть();

Этап 3: Технические тонкости и типичные ошибки

В процессе работы мы выяснили несколько критически важных моментов:

  1. RqUID и rq_uid: Это идентификатор запроса. В заголовке HTTP и в теле JSON-структуры он должен быть одинаковым для одного вызова, но уникальным для каждого нового действия (отдельный для получения токена, отдельный для создания заказа).
  2. Регистрация API в ЛК: Если вы получаете ошибку 401 Unauthorized Not registered to plan, не ищите ошибку в коде. Это значит, что ваше приложение на портале разработчика Сбера не подписано на продукт «Плати QR» или СБП.
  3. Срок жизни токена: Токен живет 60 секунд. Проектируйте архитектуру так, чтобы запрашивать токен непосредственно перед выполнением операции.
  4. Идентификатор id_qr: Этот параметр выдается банком после заключения договора. Без него создание заказа невозможно. Для СБП это tid (идентификатор терминала).

Анализируя ситуацию, мы видим, что наиболее эффективный способ отладки — это сравнение сформированного вами JSON-тела с эталонным примером из документации банка. Используйте для этого любой удобный редактор, чтобы проверить кавычки и структуру массива.

Работа с банковскими API — это итеративный процесс. Не бойтесь обращаться в техническую поддержку банка, если документация кажется неполной, но всегда прикладывайте к запросу лог вашего запроса и ответ сервера — это значительно ускоряет решение проблемы.

← На главную