Стоит задача, настроить интеграцию с Диадок посредством HTTP-запросов.
Ключ разработчика есть, API оплачен - через компоненту все работает.
При попытке получения авторизационного токена приходит код состояния 400 с ответом "Could not deserialize certificate from the request body".
Менеджер = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider","",75);
Хранилиище = Менеджер.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты,РасположениеХранилищаСертификатовКриптографии.ДанныеКомпьютера);
Сертификаты = Хранилиище.ПолучитьВсе();
Сертификат = Сертификаты[0];
ДД = Сертификат.Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст = "выбрать ApiClientId как ключ
|из справочник.автомирпользователидиадок
|где код = ""!Группа 1""";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КлючРазработчика = Выборка.Ключ;
КонецЕсли;
Запрос = Неопределено;
Соединение = Новый HTTPСоединение("diadoc-api.kontur.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/v3/Authenticate?type=certificate");
Запрос.Заголовки.Вставить("POST /v3/Authenticate?type=certificate HTTP/1.1");
Запрос.Заголовки.Вставить("Host", "diadoc-api.kontur.ru");
Запрос.Заголовки.Вставить("Content-Type", "octet-stream");
Запрос.Заголовки.Вставить("Content-Length", "1252");
Запрос.Заголовки.Вставить("Connection", "Keep-Alive");
Запрос.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id=" + КлючРазработчика);
Запрос.УстановитьТелоИзДвоичныхДанных(ДД);
Попытка
//Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ФайлРезультата = ПолучитьИмяВременногоФайла();
Соединение.ОтправитьДляОбработки(Запрос, ФайлРезультата);
Ответ = Новый ТекстовыйДокумент();
Ответ.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
СтрокаОтвета = Ответ.ПолучитьТекст();
Исключение
Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Показать
Ткните, пожалуйста, что я делаю не так, и как надо сделать, чтобы заработало?
Ну понятно же написано: "Could not deserialize certificate from the request body". " Что в документации по поводу request body написано и что ты туда пихаешь?
(2) Какие двоичные данные я только ни пытался передать в тело запроса - ответ тот же.
В документации только так написано: 400 Bad Request – данные в запросе имеют неверный формат или отсутствуют обязательные параметры.
Тех поддержка диадока попросила у меня файл открытого сертификата, проверила запрос с помощью, вероятно, postman и прислала скрин, что все ок, ответ 200. А дальше, говорят разбирайтесь сами, что вы там в тело запроса передаете.
В общем, на мой вопрос они так и не ответили. На гитхабе тоже тишина. Я уже просто не понимаю, что именно нужно передать и откуда это взять.
(4) Вы можете написать как это должно выглядеть? Был бы весьма благодарен.
Для меня "deserialize" ни о чем не говорит, сколько ни гуглил - ничего не нашел похожего или внятно разжеванного.
(8) Я первый раз работаю с сертификатами и с HTTP-запросами (ну, так получилось). Я ни в чем не уверен.
Этт способ получения сертификатов выдал мне хоть какие-то данные (во всяком случае данные нужного сертификата).
(10) Версия КриптоПро 4.0.9963.
Вы хотите сказать, что дело в "GOST R 34.10-2001"? Это я брал из интернетов, вполне возможно, что и что-то устаревшее.
Попробовал поменять на 34.10-2012, упала ошибка "Ошибка при получении контекста модуля криптографии"