Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2020, 15:15   #1
Neznayka2016
Пользователь
 
Регистрация: 18.03.2016
Сообщений: 29
По умолчанию Api Binance

Отправляю запрос на создание тестового ордера, запрос выполняется корректно.
Код:
var
  PostData                        : TStringStream;
  url, sign, queryString, nonce   : string;
  s_url                           : string;
  data                            : string;
begin
      nonce:= GetNonce;
      url:= 'https://api.binance.com/api/v3/order/test?'; // тестовый ордер
      // внимание - отсутствует & перед quantity
      // при вычислении подписи, т.к. эта часть в теле запроса
      queryString:= 'symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTCquantity=0.2&price=0.0052&recvWindow=5000&timestamp=' + nonce;
      sign:= Signature(queryString);
      data:= 'quantity=0.2&price=0.0052&recvWindow=5000&timestamp=' + nonce + '&signature=' + sign;
      FidHTTP.Request.CustomHeaders.Add('X-MBX-APIKEY:' + PublicKey);
      PostData:= TStringStream.Create(data);
      s_url := url + 'symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC';
      Result.Data:= FidHTTP.Post(s_url, PostData);
      PostData.Free;
end
Но при попытке таким же образом создать ордер (url:= 'https://api.binance.com/api/v3/order?',HTTP/1.1 400 Bad Request.
Neznayka2016 вне форума Ответить с цитированием
Старый 19.05.2020, 18:25   #2
Neznayka2016
Пользователь
 
Регистрация: 18.03.2016
Сообщений: 29
По умолчанию

Пока ожидал помощи, решил вопрос путем добавления в конструктор строки
Код:
FidHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent];
Теперь конструктор выглядит так
Код:
...
  FidHTTP:= TidHTTP.Create(Self);
  FidHTTP.HandleRedirects:= True;
  FidHTTP.HTTPOptions:= [hoKeepOrigProtocol, hoForceEncodeParams, hoNoProtocolErrorException, hoWantProtocolErrorContent];
  FSSL:= TIdSSLIOHandlerSocketOpenSSL.Create(Self);
  FidHTTP.IOHandler:= FSSL;
...
Функция создания лимитного ордера на покупку выглядит так
Код:
function TBinanceBrocker.CreateOrderBuyLimit(aSymbol, aQuantity, aPrice: string): TApiResponse;
var
  PostData                        : TStringStream;
  url, sign, queryString, nonce   : string;
  data                            : string;
begin
  try
    try
      nonce:= GetNonce;
      queryString:= 'symbol=' + aSymbol + '&side=BUY&type=LIMIT&timeInForce=GTCquantity=' + aQuantity + '&price=' + aPrice + '&recvWindow=5000&timestamp=' + nonce;
      sign:= Signature(queryString);
      data:= 'quantity=' + aQuantity + '&price=' + aPrice + '&recvWindow=5000&timestamp=' + nonce + '&signature=' + sign;
      FidHTTP.Request.CustomHeaders.Add('X-MBX-APIKEY:' + PublicKey);
      PostData:= TStringStream.Create(data);
      url:= UrlAPI + '/v3/order?' + 'symbol=' + aSymbol + '&side=BUY&type=LIMIT&timeInForce=GTC';
      Result.Data:= FidHTTP.Post(url, PostData);
    finally
      PostData.DisposeOf;
    end;
  except on E: Exception do
    begin
      Result.IsOk:= False;
      Result.Data:= e.Message;
    end;
  end;
end;
Если что не так, прошу подсказать. Поскольку все это в тестовом режиме и баланс я еще не пополнил, считаю сообщение сервера {"code":-2010,"msg":"Account has insufficient balance for requested action."} вполне заслуженным)
Neznayka2016 вне форума Ответить с цитированием
Старый 25.05.2020, 20:42   #3
mobivovka
Новичок
Джуниор
 
Регистрация: 25.05.2020
Сообщений: 1
По умолчанию

Можешь поделиться кодом создания подписи и как ты обрабатываешь JSON?
mobivovka вне форума Ответить с цитированием
Старый 31.05.2020, 22:46   #4
Neznayka2016
Пользователь
 
Регистрация: 18.03.2016
Сообщений: 29
По умолчанию

Подключить модуль System.Hash, можешь отсюда скопировать название и вставить в свой проект. В делфи 10.3.3 этот модуль есть, в более ранних версиях не знаю, я не профи.
Код подписи:
Код:
function TBinanceBrocker.Signature(AData: string): string;
begin
  Result:= THashSHA2.GetHMAC(RawByteString(aData), FSecretKey, SHA256);
end;
По работе с JSON примеров в интернете много.

Последний раз редактировалось Neznayka2016; 31.05.2020 в 22:50.
Neznayka2016 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связать таблицу Excel c аккаунтом Binance по api Олег_Архипка Фриланс 3 10.09.2018 07:06
API с Binance DenisViz Работа с сетью в Delphi 3 29.03.2018 12:51
как извлекать Rest API с Binance DenisViz Работа с сетью в Delphi 2 28.03.2018 22:39