Перейти к содержимому

1С Тинькофф Инвестиции

1С Тинькофф Инвестиции

1С Тинькофф Инвестиции – простой пример использования TINKOFF INVEST API, для получения данных пользователя и информации по счетам.

1. Создать токен для API.

В личном кабинете https://www.tinkoff.ru/invest/settings/ раздел «Настройки», «Создать токен»:

1С Тинькофф Инвестиции - Создать токен
1С Тинькофф Инвестиции — Создать токен

Выбрать «Все счета», далее «Только для чтения» и нажать «Выпустить токен»:

1С Тинькофф Инвестиции - Выпустить токен
1С Тинькофф Инвестиции — Выпустить токен

После «Скопировать токен» и сохранить его в безопасном месте, например в менеджере паролей.

2. Подготовка конфигурации.

  1. Создать пустую конфигурацию и добавить «Коннектор: удобный HTTP-клиент для 1С:Предприятие 8», о том как это сделать подробно описано в публикации «Телеграм бот 1С».
  2. Добавить общую форму и разместить ее в рабочей области начальной страницы.
  3. Добавить на общую форму команду «Тест» и обработчик к ней.
  4. Добавить на общую форму, реквизит формы «Журнал», с типом «Текстовый документ».

3. Получение данных.

В приведенном коде показано, как получить сначала информацию о пользователе, далее список и данные по счетам, для этого используются соответствующие методы:

  • GetInfo — Получение информации о пользователя.
  • GetAccounts — Получение списка счетов пользователя.
  • GetPortfolio — Получение портфолио.
&НаСервере
Процедура ТестНаСервере()
	
	Токен = "Ваш_токен";
	
	Заголовки = Новый Соответствие;                                                                   
	Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
	Заголовки.Вставить("Authorization", "Bearer " + Токен);
	
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
	ДополнительныеПараметры.Вставить("Данные", "{}");
	
	// GetInfo - Получение информации о пользователя.
	Адрес = "https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.UsersService/GetInfo";
	
	Результат = КоннекторHTTP.Post(Адрес, Неопределено, ДополнительныеПараметры);
	Если Результат.КодСостояния <> 200 Тогда
		Возврат;
	КонецЕсли;
	
	ИнформацияОПользователе = КоннекторHTTP.КакТекст(Результат);
	Журнал.ДобавитьСтроку(ИнформацияОПользователе + Символы.ПС);

	// GetAccounts - Получение списка счетов пользователя. 
    Адрес = "https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts";
	Результат = КоннекторHTTP.Post(Адрес, Неопределено, ДополнительныеПараметры);
	Если Результат.КодСостояния <> 200 Тогда
		Возврат;
	КонецЕсли;
	
	ДанныеСчетовКлиента = КоннекторHTTP.КакJson(Результат);
	Счета = ДанныеСчетовКлиента.Получить("accounts");
	
	Для каждого Счет Из Счета Цикл
		
		ИдентификаторСчета = Счет.Получить("id");
		ИмяСчета = Счет.Получить("name");
		СтатусСчета = Счет.Получить("status");
		
		Журнал.ДобавитьСтроку(СтрШаблон("ID: %1 %2 %3", ИдентификаторСчета, ИмяСчета, СтатусСчета));
	
	КонецЦикла;
	
	// GetPortfolio - Получение портфолио.
	Адрес = "https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.OperationsService/GetPortfolio";   
	
	ИтоговаяСтоимость = 0;
	Для каждого Счет Из Счета Цикл
		
		ДополнительныеПараметры.Данные = КоннекторHTTP.ОбъектВJson(Новый Структура("accountId", Счет.Получить("id")));
		
		Результат = КоннекторHTTP.Post(Адрес, Неопределено, ДополнительныеПараметры); 
		Если Результат.КодСостояния <> 200 Тогда
			Возврат;
		КонецЕсли;
		
		ДанныеСчета = КоннекторHTTP.КакJson(Результат);
		
		ОбщаяСтоимостьАкций = Число(ДанныеСчета.Получить("totalAmountShares").Получить("units"));
		ОбщаяСтоимостьОблигаций = Число(ДанныеСчета.Получить("totalAmountBonds").Получить("units"));
		ОбщаяСтоимостьФондов = Число(ДанныеСчета.Получить("totalAmountEtf").Получить("units"));
		ОбщаяСтоимостьВалют = Число(ДанныеСчета.Получить("totalAmountCurrencies").Получить("units"));
		ОбщаяСтоимостьФьючерсов = Число(ДанныеСчета.Получить("totalAmountFutures").Получить("units"));
		
		ИтоговаяСтоимость = ИтоговаяСтоимость + ОбщаяСтоимостьАкций + ОбщаяСтоимостьОблигаций + ОбщаяСтоимостьФондов + ОбщаяСтоимостьВалют + ОбщаяСтоимостьФьючерсов;  
	
	КонецЦикла;
	
	Журнал.ДобавитьСтроку(ИтоговаяСтоимость);
	
КонецПроцедуры

Примечание:
Токен не рекомендуется указывать прямо в коде, это называется «хардкод» и является нарушением безопасности а так же плохим стилем. Для хранения можете использовать константу, если конфигурация на основе БСП, безопасное хранение паролей, см. «Безопасность 1С».

Дополнительная информация:
Версия платформы: 1С:Предприятие 8.3 (8.3.20.1838).
Исходные коды доступны в репозитории на GitHub.

Метки:

7 комментариев для “1С Тинькофф Инвестиции”

  1. Константин, добрый день!

    Благодарю за статью! Мне она заметно помогла.

    Но возникла проблема с другими методами. Например, метод для получения списка акций или облигаций.
    «https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.InstrumentsService/Bonds»

    Не подскажете, что в данном случае следует сделать?

    У меня на выходе получается бесконечная строка вида:
    ewogICJpbnN0cnVtZW50cyI6IFt7CiAgICAiZmlnaSI6ICJCQkcwMFFYR0ZIUzYi
    LAogICAgInRpY2tlciI6ICJSVTAwMEExMDEyMjgiLAogICAgImNsYXNzQ29kZSI6
    ICJUUUNCIiwKICAgICJpc2luIjogIlJVMDAwQTEwMTIyOCIsCiAgICAibG90Ijog
    MSwKICAgICJjdXJyZW5jeSI6ICJydWIiLAogICAgInNob3J0RW5hYmxlZEZsYWci

    А хотелось бы иметь структуру с данными…

    1. Извиняюсь, вопрос снимается. Я просто не тот метод обработки результата использовал. Надо КоннекторHTTP.КакJson(Результат), а я вдруг сначала выбрал КоннекторHTTP.КакДвоичныеДанные(Результат).

  2. Добрый день! подскажите, что не так с запросом, пожалуйста…

    Адрес = "https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy";
    	ЗапросСтруктура = Новый Структура();
    	ЗапросСтруктура.Вставить("idType", "figi");
    	ЗапросСтруктура.Вставить("classCode", "SPBXM");
    	ЗапросСтруктура.Вставить("id", "US03831W1080");
    	
    	ДополнительныеПараметры.Данные = КоннекторHTTP.ОбъектВJson(ЗапросСтруктура);
             
        Результат = КоннекторHTTP.Post(Адрес, Неопределено, ДополнительныеПараметры);
    

    Получаю код состояния 400

  3. Наименование полей брал отсюда: https://tinkoff.github.io/investAPI/swagger-ui/#/InstrumentsService/InstrumentsService_GetInstrumentBy
    К сожалению, Ваш совет не помог, так же получаю 400. Проблема с методами «GetBy». Подозреваю, что проблема с дополнительными параметрами, но где конкретно, понять не могу.

    1. Попробуйте вот так:

      &НаСервере
      Процедура ТестНаСервере()
      	
      	Токен = Константы.ТокенТинькоффИнвестиции.Получить();
           
          Заголовки = Новый Соответствие;                                                                   
          Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
          Заголовки.Вставить("Authorization", "Bearer " + Токен);   
      	
      	ДополнительныеПараметры = Новый Структура;
      	ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
      	ДополнительныеПараметры.Вставить("Данные", "{}");  
      	
      	ЗапросСтруктура = Новый Структура();
          ЗапросСтруктура.Вставить("id_type", 1);
          ЗапросСтруктура.Вставить("class_code", "SPBXM");
          ЗапросСтруктура.Вставить("id", "US03831W1080");  
           
          ДополнительныеПараметры.Данные = КоннекторHTTP.ОбъектВJson(ЗапросСтруктура);
      	
      	Адрес = "https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy";
      	
          Результат = КоннекторHTTP.Post(Адрес, Неопределено, ДополнительныеПараметры);
      	
      	InstrumentResponse = КоннекторHTTP.КакJson(Результат);
      	
      	Для каждого Данные Из InstrumentResponse["instrument"] Цикл
      		
      		Журнал.ДобавитьСтроку(Данные.Ключ + " = " + Данные.Значение);
      	
      	КонецЦикла;
      	
      КонецПроцедуры
      
      1. Добрый день!
        Спасибо большое! Неочевидный параметр «id_type». Без вас бы долго разбирался.

        Отдельное спасибо за КоннекторHTTP! Очень удобная и качественная библиотека!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *