Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » API BINANCE

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

yrkrus



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго дня, пните в нужном направлении,а то при запросе получаю 400 Bad Request на параметре ServerOtvet
 

Код:
 
 
function GetUserTrade(InValytnayaPara,InNameBirza:string):string;
  var
  ApiKey,ApiSecret,Signature:string;
  nonce:string; // текущая дата и время в формате Unix
  http:TIdHTTP;
  ssl:TIdSSLIOHandlerSocketOpenSSL;
  params:TStringStream;
  ServerOtvet:WideString;
  ValPar:string;
  SocksInfo:TIdSocksInfo;
  Proxy:Boolean;
  test:string;
 
begin
 
 
  ApiKey:=SettingsLoadString('core','ApiKey_'+InNameBirza,'');
  ApiSecret:=SettingsLoadString('core','ApiSecret_'+InNameBirza,'');
 
SITE_USER_TRADES_BINANCE:='https://api.binance.com/api/v3/myTrades';
     
     
        ValPar:=InValytnayaPara;
        ValPar:=StringReplace(ValPar,'/','',[rfReplaceAll]);
 
         // высчитываем текущее время биржи
         repeat
           nonce:=GetResponceToServerBINANCE(SITE_SERVERTIME_BINANCE);
           if APIError then
           begin
            Logging('ОШИБКА API! Отправка повторного запроса. Ответ сервера: '+CodOshibki+' Запрос: '+URLOshibki);
            Sleep(SLEEPTIME*10);
           end;
         until APIError=False;
 
          // разбираем
          System.Delete(nonce,1,AnsiPos(':',nonce));
          System.Delete(nonce,Length(nonce),Length(nonce));
 
        params:=TStringStream.Create;
        params.WriteString('timestamp='+nonce);
        Signature:=SHA256DigestToHexA(CalcHMAC_SHA256(ApiSecret,params.DataString));
 
        http:=TIdHTTP.Create(nil);
 
         // проверка работаем через прокси
          if GetBotJobInProxy then
          begin
            if (TypeProxy[0]=SettingsLoadString('proxy','TypeProxy','везде')) or
               (TypeProxy[1]=SettingsLoadString('proxy','TypeProxy','везде'))
            then Proxy:=True else Proxy:=False;
          end
          else Proxy:=False;
 
          if Proxy then
          begin
            SocksInfo:=TIdSocksInfo.Create(nil);
            with SocksInfo do begin
               Host:=SettingsLoadString('proxy','Server','');
               Port:=StrToInt(SettingsLoadString('proxy','Port',''));
 
               if SettingsLoadString('proxy','Socks','Socks4')='Socks4' then Version:=svSocks4
               else Version:=svSocks5;
 
               // авторизация
               if SettingsLoadString('proxy','Auth','false')='true' then
               begin
                 Authentication:=saUsernamePassword;
                 UserName:=SettingsLoadString('proxy','AuthLogin','');
                 Password:=SettingsLoadString('proxy','AuthPwd','');
               end;
 
            end;
            ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(SocksInfo);
            ssl.TransparentProxy:=SocksInfo;
            ssl.SSLOptions.Method:=sslvTLSv1_2;
            ssl.SSLOptions.SSLVersions:=[sslvTLSv1_2];
          end
          else
          begin
           ssl:=TIdSSLIOHandlerSocketOpenSSL.Create(http);
           ssl.SSLOptions.Method:=sslvTLSv1_2;
           ssl.SSLOptions.SSLVersions:=[sslvTLSv1_2];
          end;
 
       with http do begin
          IOHandler:=ssl;
          Request.CustomHeaders.Add('X-MBX-APIKEY:'+ApiKey);
          Request.CustomHeaders.Add(CustomHeaders0);
          Request.CustomHeaders.Add(CustomHeaders1);
          Request.CustomHeaders.Add(CustomHeaders2);
          Request.CustomHeaders.Add(CustomHeaders3);
          Request.CustomHeaders.Add(CustomHeaders4);
 
         try
 
          ServerOtvet:=Get(SITE_USER_TRADES_BINANCE+'?symbol='+ValPar+'&limit=50'+'&timestamp='+nonce+'&signature='+Signature);
          APIError:=False;
         except
           APIError:=True;
           CodOshibki:=Response.ResponseText;
           URLOshibki:=SITE_USER_TRADES_BINANCE+'?timestamp='+nonce+'&symbol='+ValPar+'&limit=50'+'&signature='+Signature;
         end;
       end;
     end;
   
 
    if ssl<>nil then
    begin
     ssl.Free;
     ssl:=nil;
    end;
    if params<>nil then
    begin
      params.Free;
      params:=nil;
    end;
    if SocksInfo<>nil then
    begin
     SocksInfo.Free;
     SocksInfo:=nil;
    end;
    if http<>nil then
    begin
      http.Free;
      http:=nil;
    end;
end;
 
 

 

Всего записей: 379 | Зарегистр. 30-11-2010 | Отправлено: 16:59 21-06-2018
yrkrus



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
сам же и отвечу...
при подписывании SHA256 нужно весь запрос подписывать
запрос вида  

Код:
 
SITE_USER_TRADES_BINANCE+'?symbol='+ValPar+'&limit=50'+'&timestamp='+nonce+'&signature='+Signature
 

подписывать  

Код:
 
params:=TStringStream.Create;
params.WriteString(symbol='+ValPar+'&limit=50'+'&timestamp='+nonce);
Signature:=SHA256DigestToHexA(CalcHMAC_SHA256(ApiSecret,params.DataString));  
 

Всего записей: 379 | Зарегистр. 30-11-2010 | Отправлено: 09:17 23-06-2018 | Исправлено: yrkrus, 09:18 23-06-2018
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » API BINANCE


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru