Как исправить ошибку 400 (Bad Request) при работе с API Сбербанка для Системы быстрых платежек (СБП) в 1С?

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

При интеграции 1С с API Сбербанка разработчики часто сталкиваются с тем, что запрос на получение токена проходит успешно, однако последующие вызовы методов API возвращают ошибку 400 Bad Request. Эта ошибка свидетельствует о том, что сервер не может распознать или валидировать переданный вами запрос. Давайте разберем по шагам, как выявить и устранить причины этой проблемы.

Проверка структуры и форматов данных

Одной из наиболее частых причин ошибки 400 Bad Request является несоответствие структуры JSON-тела запроса актуальной схеме API банка. Сбербанк регулярно обновляет свои спецификации, поэтому важно проверять каждое поле.

В ходе анализа проблемы автора выяснилось следующее:

  1. Валидация идентификатора idQR: В документации к API Сбера строго регламентирована длина и формат параметров. Например, для поля idQR ожидается строка определенной длины (часто это 36 символов). Если вы передаете идентификатор, который не соответствует этому правилу, сервер вернет ошибку валидации схемы.
  2. Корректность типов данных: Убедитесь, что все поля, такие как rq_tm (время запроса), передаются в строгом формате ISO 8601. Любое отклонение в формате даты или времени приведет к сбою.
  3. Заголовки запроса: Важно, чтобы заголовок Content-Type соответствовал типу передаваемых данных. Если вы формируете JSON-объект, заголовок должен быть application/json. Попытка передать JSON с заголовком application/x-www-form-urlencoded гарантированно приведет к ошибке.

Анализ параметров авторизации и scope

Даже если тело запроса сформировано идеально, ошибка может крыться в правах доступа, предоставленных вашему токену. Посмотрим на этот момент внимательнее:

При получении токена (Access Token) вы указываете параметр scope. Если в этом параметре не указаны права, необходимые для выполнения конкретной операции (например, для запроса реестра транзакций), сервер может отклонить запрос.

Чтобы убедиться, что причина именно в этом, выполните следующие действия:

  1. Перечитайте документацию к конкретному методу API, который вы вызываете.
  2. Найдите информацию о требуемых scope для этого метода.
  3. Убедитесь, что ваш запрос на получение токена содержит все необходимые области доступа.

Работа с уникальными идентификаторами запросов (RqUID)

Каждое обращение к API банка должно сопровождаться уникальным идентификатором запроса RqUID. Это критически важно для предотвращения дублирования операций. Если вы используете один и тот же RqUID для повторных попыток отправки или для разных операций, банк отклонит такой запрос.

Рекомендуем генерировать RqUID динамически при каждом вызове. В 1С это можно сделать стандартными средствами:


// Пример генерации уникального идентификатора в 1С
УникальныйИдентификатор = Новый УникальныйИдентификатор;
RqUID = СтрЗаменить(Строка(УникальныйИдентификатор), "-", "");

Рекомендации по интеграции с типовыми конфигурациями

Прежде чем приступать к написанию прямой интеграции через HTTPСоединение, проанализируйте, нет ли готовых решений в вашей конфигурации:

Итоговый чек-лист для отладки

Если вы все же решили использовать прямую интеграцию, пройдите по этому списку, чтобы локализовать проблему:

  1. Проверка тела запроса: Сравните ваш JSON-объект с актуальным примером из Swagger-документации Сбера. Обратите внимание на обязательные поля.
  2. Логирование: Выводите в лог (или файл) весь текст запроса, который уходит из 1С, и весь ответ сервера. Анализ ответа сервера часто содержит подсказку в поле moreInformation.
  3. Сертификаты: Убедитесь, что сервер 1С имеет доступ к корневым сертификатам Сбербанка. При отсутствии доверия к сертификату соединение не будет установлено.
  4. Срок действия токена: Реализуйте проверку времени жизни токена. Если токен просрочен, API вернет 401 или 403, но иногда ошибки авторизации могут маскироваться под общие ошибки валидации.

Надеемся, что данные рекомендации помогут вам успешно завершить настройку интеграции с API Сбербанка.

← На главную