Заполнение информации о Контрагенте по ИНН через сервис api-fns.ru
Теги: 1С,Запросы,Http,HttpСоединение

Необходимо получить API ключ, бесплатно выдается на портале;
Получение формата данных JSON с помощью стандартного GET - запроса;
Необходимо учитывать что подключение защищенное (нужно указать параметр СоединениеOpenSSL в http-соединении, иначе будет получен редирект);

# Код реализации

```1c
&НаКлиенте
Процедура ЗаполнитьПоИНН(Команда)

	 //Проверка заполнения ИНН;
	 Если НЕ ЗначениеЗаполнено(Объект.ИНН) Тогда

		 Сообщение = Новый СообщениеПользователю;
		 Сообщение.Текст = "Значение реквизита не заполнено !";
		 Сообщение.Поле = "ИНН";
		 Сообщение.Сообщить();
		 Возврат;

	 КонецЕсли;

	 //Создаем HTTPS-соединение, GET-запрос;
	 hostname 		= "api-fns.ru";
	 APIkey			= "СЮДА ВВОДИМ АПИ КЛЮЧ";
	 resourse 		= СтрШаблон("/api/egr?req=%1&key=%2+", Объект.ИНН, APIkey);

	 httpconn 		= Новый HTTPСоединение(hostname ,,,,, 5, Новый ЗащищенноеСоединениеOpenSSL());
	 httprequest 	        = Новый HTTPЗапрос(resourse);

	 Ответ = Неопределено;

	Попытка

		Ответ = httpconn.Получить(httprequest);

	Исключение

		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось выполнить http запрос, код состояния:" + Ответ.КодСостояния;
		Сообщение.Сообщить();
		Возврат;

	КонецПопытки;

	//чтение ответа HTTP-сервера;
	СведенияJSON = Неопределено;
	Попытка

		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));

		СведенияJSON = ПрочитатьJSON(ЧтениеJSON, Истина);

	Исключение

		Возврат;

	КонецПопытки;

	//достаем из соответствия необходимую информацию;
	Попытка
		ПолученноеЗначениеКПП 				= СведенияJSON["items"][0]["ЮЛ"]["КПП"];
		ПолученноеЗначениеНаименование 	        = СведенияJSON["items"][0]["ЮЛ"]["НаимСокрЮЛ"];
		ПолученноеЗначениеЮрЛицо 			=  СведенияJSON["items"][0]["ЮЛ"]["Адрес"]["АдресПолн"];
	Исключение
		Сообщение 		= Новый СообщениеПользователю;
		Сообщение.Текст 	= "Произошла ошибка! Перепроверьте введенную информацию";
		Сообщение.Сообщить();
		Возврат;
	КонецПопытки;
	//произвольное кол-во реквизитов;

	//делаем проверку на расхождение полученных данных и данных контрагента;
	Если Объект.КПП <> ПолученноеЗначениеКПП
			ИЛИ Объект.Наименование <> ПолученноеЗначениеНаименование
			ИЛИ Объект.Наименование <> ПолученноеЗначениеНаименование Тогда

		//если расхождение есть, задаем вопрос:
		ТекстВопроса = "Для ИНН "+ Объект.ИНН +
		" в государственном реестре плательщиков соответствует юридическое лицо со следующими реквизитами:
		|
		|Наименование: " + ПолученноеЗначениеНаименование + "
		|КПП                : " + ПолученноеЗначениеКПП + "
		|ЮрАдрес		: " + ПолученноеЗначениеЮрЛицо + "
		|Установить данные реквизиты для текущего контрагента?";

		Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);

	КонецЕсли;

	Если  Ответ = КодВозвратаДиалога.Нет Тогда

		Возврат;

	Иначе

		Объект.КПП = ПолученноеЗначениеКПП;
		Объект.Наименование = ПолученноеЗначениеНаименование;

		ЮрАдресЗначение =  ПолучитьВидКонтактнойИнформацииЮрАдрес();
		СтруктураОтбора = Новый Структура("Вид", ЮрАдресЗначение);

		МассивЗначений = Объект.КонтактнаяИнформация.НайтиСтроки(СтруктураОтбора);

		Если МассивЗначений.Количество() <> 0 Тогда
		   Объект.КонтактнаяИнформация.Удалить(МассивЗначений[0]);
		КонецЕсли;

		НоваяСтрокаТЧ = Объект.КонтактнаяИнформация.Добавить();
		НоваяСтрокаТЧ.Тип = ПолучитьТипКонтактнойИнформации();
		НоваяСтрокаТЧ.Вид = ЮрАдресЗначение;
		НоваяСтрокаТЧ.Значение = ПолученноеЗначениеЮрЛицо;

	КонецЕсли;

КонецПроцедуры

//вспомогательные функции;
&НаСервереБезКонтекста
Функция ПолучитьВидКонтактнойИнформацииЮрАдрес()
	Возврат Справочники.ВидыКонтактнойИнформации.ЮридическийАдресКонтрагента;
КонецФункции // ()

&НаСервереБезКонтекста
Функция ПолучитьТипКонтактнойИнформации()
	Возврат Перечисления.ТипыКонтактнойИнформации.Адрес;
КонецФункции // ()
```