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

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.

Метки:

2 комментария для “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.КакДвоичныеДанные(Результат).

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

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