1С Тинькофф Инвестиции – простой пример использования TINKOFF INVEST API, для получения данных пользователя и информации по счетам.
1. Создать токен для API.
В личном кабинете https://www.tinkoff.ru/invest/settings/ раздел «Настройки», «Создать токен»:

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

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

Константин, добрый день!
Благодарю за статью! Мне она заметно помогла.
Но возникла проблема с другими методами. Например, метод для получения списка акций или облигаций.
«
https://invest-public-api.tinkoff.ru/rest/tinkoff.public.invest.api.contract.v1.InstrumentsService/Bonds»Не подскажете, что в данном случае следует сделать?
У меня на выходе получается бесконечная строка вида:
ewogICJpbnN0cnVtZW50cyI6IFt7CiAgICAiZmlnaSI6ICJCQkcwMFFYR0ZIUzYi
LAogICAgInRpY2tlciI6ICJSVTAwMEExMDEyMjgiLAogICAgImNsYXNzQ29kZSI6
ICJUUUNCIiwKICAgICJpc2luIjogIlJVMDAwQTEwMTIyOCIsCiAgICAibG90Ijog
MSwKICAgICJjdXJyZW5jeSI6ICJydWIiLAogICAgInNob3J0RW5hYmxlZEZsYWci
…
А хотелось бы иметь структуру с данными…
Извиняюсь, вопрос снимается. Я просто не тот метод обработки результата использовал. Надо КоннекторHTTP.КакJson(Результат), а я вдруг сначала выбрал КоннекторHTTP.КакДвоичныеДанные(Результат).
Добрый день! подскажите, что не так с запросом, пожалуйста…
Адрес = "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
День добрый, Дмитрий.
Посмотрел описание запроса https://tinkoff.github.io/investAPI/instruments/#instrumentrequest обратите внимание на наименование полей.
Наименование полей брал отсюда: https://tinkoff.github.io/investAPI/swagger-ui/#/InstrumentsService/InstrumentsService_GetInstrumentBy
К сожалению, Ваш совет не помог, так же получаю 400. Проблема с методами «GetBy». Подозреваю, что проблема с дополнительными параметрами, но где конкретно, понять не могу.
Попробуйте вот так:
&НаСервере Процедура ТестНаСервере() Токен = Константы.ТокенТинькоффИнвестиции.Получить(); Заголовки = Новый Соответствие; Заголовки.Вставить("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"] Цикл Журнал.ДобавитьСтроку(Данные.Ключ + " = " + Данные.Значение); КонецЦикла; КонецПроцедурыДобрый день!
Спасибо большое! Неочевидный параметр «id_type». Без вас бы долго разбирался.
Отдельное спасибо за КоннекторHTTP! Очень удобная и качественная библиотека!