Для работы с API Контур.Диадок необходимо получить ключ разработчика, для этого обратитесь в техническую поддержку Контур.Диадок.
Процедура аутентификации сертификатом состоит из двух запросов: сначала запрос Authenticate а затем запрос AuthenticateConfirm.
Нас интересует запрос Authenticate с типом certificate:
АдресРесурса = "/V3/Authenticate?type=certificate";
В запрос Authenticate в качестве тела запроса передаются двоичные данные выбранного сертификата. Прилагаемая обработка приспособлена для типовых конфигураций, в которых реализован справочник "Сертификаты ключей электронной подписи и шифрования". При работе с этим справочником двоичные данные сертификата можно получить готовой функцией:
ДвоичныеДанныеСертификата = Сертификат.ДанныеСертификата.Получить();
Двоичные данные сертификата затем записываются в файл и тело запроса устанавливается из файла.
В теле ответа на запрос Authenticate возвращается зашифрованный текст, который нужно расшифровать, используя имеющийся сертификат ЭЦП. Для этого можно использовать встроенный объект 1С "Менеджер криптографии". Заметим, что вызывая функцию Расшифровать() менеджера криптографии, мы не указываем никакого конкретного сертификата, потому что этот метод пытается выполнить расшифровку используя все доступные сертификаты.
После успешной расшифровки, расшифрованные данные нужно закодировать по алгоритму base64, на что в 1С также предусмотрен готовый метод. После кодирования в base64 эти данные нужно подготовить для передачи в запрос в качестве URL-параметра, поэтому следует дополнительно кодировать строку по методу URL и только потом уже формировать адрес ресурса второго запроса:
ДанныеBase64URL = КодироватьСтроку(ДанныеBase64, СпособКодированияСтроки.КодировкаURL);
АдресРесурса = "/V2/AuthenticateConfirm?token=" + ДанныеBase64URL;
Во второй запрос, также как и в первый, в тело запроса передаются двоичные данные сертификата. И второй запрос возвращает для нас уже готовый для использования токен.
Для теста на работоспособность на форме обработки есть вторая кнопка "Организации", которая выполняет запрос GetMyOrganizations. Для выполнения запроса в заголовок передается не только ключ разработчика, но и полученный токен:
Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id=" + КлючРазработчика + ",ddauth_token=" + Токен);
Внутри обработки вы найдете аккуратный отлаженный код, который я запускал на платформе 8.3.18.1208 на типовой конфигурации Бухгалтерия предприятия 3.0.87.22. Но, повторюсь, обработка сохранит работоспособность в любой типовой конфигурации реализующей справочник "Сертификаты ключей электронной подписи и шифрования".