PDA

Просмотр полной версии : API Tinkoff



aabbam
24.07.2022, 19:12
Есть потребность в связи по API с этим банком. Опыта такого не имел. Не знаю даже, с чего начать. Может кто-нибудь что-нибудь посоветовать?

Hitcher73
24.07.2022, 19:54
Начинайте сразу с API2

aabbam
26.07.2022, 11:28
Каким образом?

Hitcher73
26.07.2022, 19:33
У Тиньков есть как минимум API с личным кабинетом и 2 API для торговли. Это совершенно разные вещи. Вам какой надо?

Когда я говорил про API 2 я имел в виду API-инвест
Вот начало
https://tinkoff.github.io/investAPI/
Вот все методы API 2
https://tinkoff.github.io/investAPI/swagger-ui/

Зная как в 1с послать HTTP запрос с помощью вышеуказанных страниц
можно получить все что необходимо для анализа и торговли

aabbam
27.07.2022, 10:12
Так вроде и знаю, курсы валют с сайта центробанка получаю, но тут что-то никак.
Задача такова, чтобы не столько торговать пока, сколько графики получать или хотя бы котировки на момент данный. Достаточно для этого просто API с кабинетом личным?

Hitcher73
27.07.2022, 19:21
Тогда вышеописанных ссылок должно хватить. Я использовал вот эту библиотекуhttps://infostart.ru/1c/articles/709325/
Попоробовать с чего- то легкого . Например получить список валют .
Вот URL = "https://invest-public-api.tinkoff.ru";

Вот метод = "/rest/tinkoff.public.invest.api.contract.v1.InstrumentsS ervice/Currencies" .
Найди этот метод на страницеhttps://tinkoff.github.io/investAPI/swagger-ui/ и посмотри требования к запросу и как будет выглядеть ответ.

Вот данные = "{""instrumentStatus"": INSTRUMENT_STATUS_UNSPECIFIED}" которые нужно передать

Также нужно передать следующие заголовки

Заголовки.Вставить("Authorization","Bearer " + Токен);
Заголовки.Вставить("accept", "application/json");
Заголовки.Вставить("Content-Type", "application/json");

где Токен - это токен -полученный в личном кабинете инвестиций
Мне хватило несколько дней чтобы с нуля во всем разобраться. Я даже не знал что такое HTTP запрос

aabbam
28.07.2022, 09:33
Процедура FormНаСервере()
Сервер = "https://invest-public-api.tinkoff.ru";
Порт = 443;
Логин = "";
Пароль = "";

Прокси = Новый ИнтернетПрокси(Ложь);
ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL(Н еопределено,Неопределено);
СоединениеHTTP = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль,Прокси,,ЗащищенноеС� �единениеOpenSSL);

Токен = "токен";

Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Заголовки.Вставить("accept", "application/json");
Заголовки.Вставить("Content-Type", "application/json");
Сервис = "rest/tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts";

ЗапросHTTP = Новый HTTPЗапрос(Сервис, Заголовки);
ЗапросHTTP.УстановитьТелоИз� �троки("{}", КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИсп ользовать);

Результат = СоединениеHTTP.ВызватьHTTPМет� �д("GET", ЗапросHTTP);

Если Результат.КодСостояния <> 200 Тогда
Сообщить("Ошибка выполнения запроса. Код состояния "+Результат.КодСостояния);
Возврат;
КонецЕсли;

Данные = Результат.ПолучитьТелоКак� �троку();
Сообщить(Данные);

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

aabbam
28.07.2022, 09:33
Я вот такое сочинил, но не работает. Причина в чём, пока мне не понятно.

borodаn
28.07.2022, 20:05
Процедура FormНаСервере()
Сервер = "https://invest-public-api.tinkoff.ru";
Порт = 443;
Логин = "";
Пароль = "";

Прокси = Новый ИнтернетПрокси(Ложь);
ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL(Н еопределено,Неопределено);
СоединениеHTTP = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль,Прокси,,ЗащищенноеС� �единениеOpenSSL);

Токен = "токен";

Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Заголовки.Вставить("accept", "application/json");
Заголовки.Вставить("Content-Type", "application/json");
Сервис = "rest/tinkoff.public.invest.api.contract.v1.UsersService/GetAccounts";

ЗапросHTTP = Новый HTTPЗапрос(Сервис, Заголовки);
ЗапросHTTP.УстановитьТелоИз� �троки("{}", КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИсп ользовать);

Результат = СоединениеHTTP.ВызватьHTTPМет� �д("GET", ЗапросHTTP);

Если Результат.КодСостояния <> 200 Тогда
Сообщить("Ошибка выполнения запроса. Код состояния "+Результат.КодСостояния);
Возврат;
КонецЕсли;

Данные = Результат.ПолучитьТелоКак� �троку();
Сообщить(Данные);

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

Сервер должен быть без https:// в Новый HTTPСоединение(Сервер,

borodаn
28.07.2022, 20:07
Ух ты, прикольно. В предыдущем сообщении в цитате больше, чем в оригинале, причем я ничего не дописывал. Когда жмешь "ответить с цитированием" в цитате появляется дополнительный текст, который не виден в оригинале, по крайней мере в моем браузере )

Короче, Сервер должен быть без https, просто Новый HTTPСоединение("invest-public-api.tinkoff.ru" ...

А тело и его тип вообще бессмысленно устанавливать.
Заголовки.Вставить("Content-Type", "application/json");
ЗапросHTTP.УстановитьТелоИз� �троки("{}", КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИсп ользовать);

Потому что когда делаешь ГЕТ, то 1С тело вообще не отправляет:
Результат = СоединениеHTTP.ВызватьHTTPМет� �д("GET", ЗапросHTTP);

borodаn
29.07.2022, 07:08
Походу это форум так работает. Теперь и мое сообщение подрезал, вчера еще полностью показывал. Но, думаю, если нажать кнопку "ответить с цитированием" - то тоже можно полностью прочитать мое предыдущее сообщение )