Почему возникает ошибка «Invalid value type 'string'» при подключении к API Сбербанка из 1С?

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

При интеграции 1С с современными API, использующими шлюзы (в частности, IBM API Connect), разработчики часто сталкиваются с ошибкой JSV0001. Эта проблема указывает на то, что формат данных, отправляемых в теле запроса, не соответствует ожиданиям API-шлюза. Давайте разберем, как диагностировать и устранить эту ошибку по шагам.

Понимание природы ошибки JSV0001

Ошибка [JSV0001] Invalid value type 'string' означает, что API-шлюз ожидает получить структурированные данные (обычно в формате JSON или строго определенном схематичном виде), но получает «сырую» строку, которую не удается распарсить. Это чаще всего происходит из-за неправильной настройки заголовка Content-Type или из-за ошибок в формировании самого тела запроса.

Шаг 1: Проверка заголовка Authorization

Одной из частых причин ошибок является некорректная передача учетных данных. Рассмотрим, как правильно сформировать заголовок Authorization для типа Basic:

  1. Заголовок должен содержать слово Basic, после которого следует пробел.
  2. Далее идет строка в формате client_id:client_secret, закодированная в Base64.
  3. Важно помнить: двоеточие между client_id и client_secret также должно быть включено в строку перед кодированием.

Если вы получаете ошибку Mismatch client ID, это означает, что значение в заголовке Authorization конфликтует с тем, что передается в заголовке x-ibm-client-id. Убедитесь, что эти значения идентичны.

Шаг 2: Формирование тела запроса

Если вы указываете Content-Type: application/x-www-form-urlencoded, данные должны быть представлены как последовательность пар ключ=значение, разделенных символом &. Проанализируем пример кода для подготовки тела:


ДанныеТелаСтрокой = "grant_type=client_credentials&scope=ваш_scope";
Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
Запрос.УстановитьТелоИзСтроки(ДанныеТелаСтрокой);

Если сервер ожидает JSON, даже при указании application/x-www-form-urlencoded (что бывает редко, но встречается), вам необходимо использовать объект ЗаписьJSON. Разберем, как это сделать правильно:


ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
СтрокаJSON = ЗаписьJSON.Закрыть();
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);

Шаг 3: Диагностика и отладка

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

Работая с API Сбербанка, всегда обращайте внимание на документацию к конкретному методу — требования к формату данных (JSON или форма) могут меняться в зависимости от версии oauth или tokens. Постепенно меняя один параметр за другим, вы сможете точно локализовать место, где API-шлюз отклоняет ваш запрос.

← На главную