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

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

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



Кавычки не лишние, а?
...
Рейтинг: 0 / 0
09.09.2020, 20:00
    #39997064
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
для начала не используйте Indy, а возьмите стандартный THttpClient
затем, любую работу с http запросами делаем с отладчиком в зубах, смотрим как формируется правильный запрос, и как ваш, смотрим разницу. Возьмите тот же Fiddler
...
Рейтинг: 0 / 0
09.09.2020, 20:08
    #39997067
SilverGarden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
К примеру имеется 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
09.09.2020, 20:21
    #39997070
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
опа, golang в PHP переименовали...
а мужики то не знают
...
Рейтинг: 0 / 0
09.09.2020, 21:37
    #39997088
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
энди
для начала не используйте Indy, а возьмите стандартный THttpClient

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

Тогда уже TNetHTTPClient.


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

Он еще новее и кроссплатформенный.
...
Рейтинг: 0 / 0
10.09.2020, 13:04
    #39997238
SilverGarden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
Друзья, спасибо за помощь. Познакомился с 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
10.09.2020, 13:08
    #39997239
SilverGarden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
Я если честно удивлен, что Тинькофф подготовил примеры для C#, Pyton, Go, Java, Ruby, а самую главную среду профессионалов Delphi проигнорировал. Думаю, есть только одно объяснение, считают, что профи разберутся сами.
...
Рейтинг: 0 / 0
10.09.2020, 15:45
    #39997350
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
SilverGarden
Значит получилось присоединиться по Indy следующим образом:
SilverGarden
Код: pascal
1.
IdHTTP.Request.BasicAuthentication := true;

Короче ССЗБ
...
Рейтинг: 0 / 0
10.09.2020, 20:01
    #39997443
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
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
11.09.2020, 09:19
    #39997530
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тинькофф инвестиции OpenAPI
SilverGarden
Думаю, есть только одно объяснение, считают, что профи разберутся сами.

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

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

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

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


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