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.КакДвоичныеДанные(Результат).
Добрый день! подскажите, что не так с запросом, пожалуйста…
Получаю код состояния 400
День добрый, Дмитрий.
Посмотрел описание запроса https://tinkoff.github.io/investAPI/instruments/#instrumentrequest обратите внимание на наименование полей.
Наименование полей брал отсюда: https://tinkoff.github.io/investAPI/swagger-ui/#/InstrumentsService/InstrumentsService_GetInstrumentBy
К сожалению, Ваш совет не помог, так же получаю 400. Проблема с методами «GetBy». Подозреваю, что проблема с дополнительными параметрами, но где конкретно, понять не могу.
Попробуйте вот так:
Добрый день!
Спасибо большое! Неочевидный параметр «id_type». Без вас бы долго разбирался.
Отдельное спасибо за КоннекторHTTP! Очень удобная и качественная библиотека!