powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тинькофф инвестиции OpenAPI
19 сообщений из 19, страница 1 из 1
Тинькофф инвестиции OpenAPI
    #39997045
SilverGarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Тинькофф разработал интерфейс для доступа к инвестиционному портфелю. Описание работы опубликовано:
https://tinkoffcreditsystems.github.io/invest-openapi/

Как я понимаю, все взаимодействие производиться по средствам вызовов Http запросов, но для начала использования протокола нужен токен (Без проблем предоставляется) и процедура авторизации которая описана на примере PHP

https://tinkoffcreditsystems.github.io/invest-openapi/auth/

вот фрагмент:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
   const (
    token   = "just_place_token_here"
    timeout = time.Second * 3
    url     = "https://api-invest.tinkoff.ru/openapi/sandbox/sandbox/register"
)

func main() {
    client := &http.Client{
        Timeout: timeout,
    }

    req, err := http.NewRequest("POST", url, nil)
    if err != nil {
        log.Fatalf("Can't create register http request: %s", err)
    }

    req.Header.Add("Authorization", "Bearer "+token)
    resp, err := client.Do(req)
    if err != nil {
        log.Fatalf("Can't send register request: %s", err)
    }



Может кто сталкивался, как данную авторизацию пройти на Delphi? я использую компонент idHttp, но никак авторизация не происходит

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
procedure TForm2.Button1Click(Sender: TObject);
var
  Param:TStringList;
  IdHTTP : TIdHTTP;
  Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
begin
  Param:= TStringList.Create;
  IdHTTP := TIdHTTP.Create(Nil);
  Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
  Try
    IdHTTP.Request.BasicAuthentication := False;
    IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

    Id_HandlerSocket.SSLOptions.Mode := sslmClient;
    Id_HandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdHTTP.IOHandler := Id_HandlerSocket;

    with idhttp.Request do
    begin
      UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.13014 YaBrowser/13.12.1599.13014 Safari/537.36';
      Host:='https://api-invest.tinkoff.ru';
      Connection:='keep-alive';
    end;
    IdHTTP.Request.ContentType:= 'application/json';

    IdHTTP.Request.CustomHeaders.AddValue('"Authorization"', '"Bearer "' + token);
    Memo1.Text := IdHTTP.Post('https://api-invest.tinkoff.ru/openapi/sandbox/sandbox/register', Param);
  Finally
    Id_HandlerSocket.Free;
    IdHTTP.Free;
  End;
  Param.Free;
end;



Если кто-то уже занимался данным вопросом, буду очень благодарен
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997054
SilverGarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос мой: как правильно следует передать токен при вызове http запросов в delphi
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997059
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как минимум поубирать кавычки
Код: pascal
1.
IdHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + token);
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997061
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverGarden

Код: pascal
1.
IdHTTP.Request.CustomHeaders.AddValue('"Authorization"', '"Bearer "' + token);



Кавычки не лишние, а?
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997064
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала не используйте Indy, а возьмите стандартный THttpClient
затем, любую работу с http запросами делаем с отладчиком в зубах, смотрим как формируется правильный запрос, и как ваш, смотрим разницу. Возьмите тот же Fiddler
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997067
SilverGarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К примеру имеется GET метод " https://api-invest.tinkoff.ru/openapi/user/accounts" который возвращает список счетов
его описание имеется: https://tinkoffcreditsystems.github.io/invest-openapi/swagger-ui/#/user/get_user_accounts

на PHP вызывается примерено так

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
func (c *RestClient) newRequest(ctx context.Context, method, url string, body io.Reader) (*http.Request, error) {
	req, err := http.NewRequest(method, url, body)
	if err != nil {
		return nil, errors.Errorf("can't create http request to %s", url)
	}

	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Authorization", "Bearer "+c.token)

	return req.WithContext(ctx), nil
}

func (c *RestClient) Accounts(ctx context.Context) ([]Account, error) {
	path := c.apiURL + "/user/accounts"

	req, err := c.newRequest(ctx, http.MethodGet, path, nil)
	if err != nil {
		return nil, err
	}

	respBody, err := c.doRequest(req)
	if err != nil {
		return nil, err
	}

	type response struct {
		Payload struct {
			Accounts []Account `json:"accounts"`
		} `json:"payload"`
	}

	var resp response
	if err = json.Unmarshal(respBody, &resp); err != nil {
		return nil, errors.Wrapf(err, "can't unmarshal response to %s, respBody=%s", path, respBody)
	}

	return resp.Payload.Accounts, nil
}



я изменил вызов с POST на GET

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
procedure TForm2.Button1Click(Sender: TObject);
var
  Param:TStringList;
  IdHTTP : TIdHTTP;
  Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
begin
  Param:= TStringList.Create;
  IdHTTP := TIdHTTP.Create(Nil);
  Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
  Try
    IdHTTP.Request.BasicAuthentication := true;

    Id_HandlerSocket.SSLOptions.Mode := sslmClient;
    Id_HandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdHTTP.IOHandler := Id_HandlerSocket;

    with idhttp.Request do
    begin
      UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.13014 YaBrowser/13.12.1599.13014 Safari/537.36';
      Host:='https://api-invest.tinkoff.ru';
      Connection:='keep-alive';
    end;
    IdHTTP.Request.ContentType:= 'application/json';

    IdHTTP.Request.CustomHeaders.AddValue('"Authorization"', 'Bearer [token]');
    Memo1.Text := IdHTTP.Get('https://api-invest.tinkoff.ru/openapi/user/accounts');
  Finally
    Id_HandlerSocket.Free;
    IdHTTP.Free;
  End;
  Param.Free;
end;



если используется : IdHTTP.Request.CustomHeaders.AddValue('"Authorization"', 'Bearer [token]'); то выдается ошибка
"HTTP/1.0 400 Bad request."

если кавычки убираю
IdHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer [token]'); то выдается ошибка
"HTTP/1.1 401 Unauthorized."

Получается, что авторизация происходит, но сервер не понимает команду?
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997070
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опа, golang в PHP переименовали...
а мужики то не знают
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997088
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди
для начала не используйте Indy, а возьмите стандартный THttpClient

Тогда уже TNetHTTPClient.
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997193
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverGarden
Получается, что авторизация происходит, но сервер не понимает команду?
Токены одинаковые? Версия SSL правильная? Fiddler устанавливали? Зачем вам UserAgent?
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997225
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
энди
для начала не используйте Indy, а возьмите стандартный THttpClient

Тогда уже TNetHTTPClient.


Зачем?
Вполне достаточно System.Net.HttpClient.THTTPClient
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997233
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди,

Он еще новее и кроссплатформенный.
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997238
SilverGarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, спасибо за помощь. Познакомился с Fiddler-ам, отличное приложение.
Значит получилось присоединиться по Indy следующим образом:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
procedure TForm2.Button1Click(Sender: TObject);
var
  Param:TStringList;
  IdHTTP : TIdHTTP;
  Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
begin
  Param:= TStringList.Create;
  IdHTTP := TIdHTTP.Create(Nil);
  Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
  Try
    Id_HandlerSocket.SSLOptions.Mode := sslmUnassigned;
    Id_HandlerSocket.SSLOptions.Method := sslvTLSv1;
    IdHTTP.IOHandler := Id_HandlerSocket;

    with idhttp.Request do
    begin
      Host:='api-invest.tinkoff.ru';
    end;

    IdHTTP.Request.ContentType:= 'application/json';

    IdHTTP.Request.CustomHeaders.Add('Authorization:Bearer [token]');
    Memo1.Text := IdHTTP.Get('https://api-invest.tinkoff.ru/openapi/user/accounts');
  Finally
    Id_HandlerSocket.Free;
    IdHTTP.Free;
  End;
  Param.Free;
end;



Тему можно закрывать.
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997239
SilverGarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я если честно удивлен, что Тинькофф подготовил примеры для C#, Pyton, Go, Java, Ruby, а самую главную среду профессионалов Delphi проигнорировал. Думаю, есть только одно объяснение, считают, что профи разберутся сами.
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997350
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverGarden
Значит получилось присоединиться по Indy следующим образом:
SilverGarden
Код: pascal
1.
IdHTTP.Request.BasicAuthentication := true;

Короче ССЗБ
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997443
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
энди,

Он еще новее и кроссплатформенный.


THTTPClient is a standalone class that is the actual HTTP implementation. TNetHTTPClient is a TComponent wrapper for THTTPClient that can be dropped on a Form/Frame/DataModule at design-time

Стырено с SO :)
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #39997530
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilverGarden
Думаю, есть только одно объяснение, считают, что профи разберутся сами.

Они просто не могут себе позволить достаточно квалифицированных специалистов по Delphi. Стартап всё-таки...
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #40050270
alexeymmmmmmmmm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SilverGarden, Привет! А методом POST проблем не возникло??
https://api-invest.tinkoff.ru/openapi/sandbox/orders/market-order?figi=BBG0013HGFT4
{"lots": 1, "operation": "Buy"}
И еще вопросик, ошибку 500 можно как-то более подробно прочитать в инди?
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #40127000
LeximusNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Автор, Добрый день.
Хотел уточнить какие успехи по работе с Тинькофф API по работе с инвестициями?
Тоже думаю написать робота, но пока выбираю на чём писать.
...
Рейтинг: 0 / 0
Тинькофф инвестиции OpenAPI
    #40127417
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeximusNet,

Мы делали летом 2021 доступ с помощью компонент esegece.com.

Тоже делал роботизированные стратегии.

Но с тех полностью полностью поменяли API документацию по старому API убрали, пока оно работает.
Новое API на GRPC с использованием ProtoBuf, на мой взгляд это переусложнено для таких простых функций, пока думаю стоит ли связываться или искать данные реального времени в другом месте.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тинькофф инвестиции OpenAPI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]