Я пытаюсь создать небольшое приложение (привет, мир для начала) для доступа к binance API с Delphi 10.3 с помощью TRESTClient.
Вот код:
procedure TfrmMain.btnInfoClick(Sender: TObject);
var workStream : TStringStream;
workResponse : TStringStream;
responseObject : ISuperObject;
serverTIME : Int64;
begin
mDEBUG.Lines.Clear;
try
workStream := TStringStream.Create;
workResponse := TStringStream.Create;
restCLIENT_MAIN.ResetToDefaults;
restREQUEST_MAIN.ResetToDefaults;
restRESPONSE_MAIN.ResetToDefaults;
restCLIENT_MAIN.BaseURL := API_URL;
serverTIME := GetAPI_TIME;
restREQUEST_MAIN.Resource := '/sapi/v1/broker/info';
restREQUEST_MAIN.ResourceSuffix := 'timestamp=' + serverTIME.ToString + '&signature=' + SECRET_KEY;
restREQUEST_MAIN.Method := TRESTRequestMethod.rmGET;
restREQUEST_MAIN.AddParameter('Content-Type', 'application/json');
restREQUEST_MAIN.AddParameter('X-MBX-APIKEY', CLIENT_KEY);
restREQUEST_MAIN.Execute;
workResponse := TStringStream.Create(restRESPONSE_MAIN.JSONText);
responseObject := TSuperObject.ParseStream(workResponse, True);
if responseObject <> nil then begin
mDEBUG.Lines.Add(responseObject.AsString);
end else begin
mDEBUG.Lines.Add(restRESPONSE_MAIN.Content);
end;
finally
mDEBUG.Lines.Add('');
mDEBUG.Lines.Add('restCLIENT_MAIN.BaseURL:' + restCLIENT_MAIN.BaseURL);
mDEBUG.Lines.Add('restREQUEST_MAIN.Resource:' + restREQUEST_MAIN.Resource);
mDEBUG.Lines.Add('restREQUEST_MAIN.ResourceSuffix:' + restREQUEST_MAIN.ResourceSuffix);
FreeAndNil(workStream);
FreeAndNil(workResponse);
end;
end;
Результат:
В этом приложении нет явного сопоставления для / error, поэтому вы рассматриваете это как запасной вариант.
Thu Apr 01 17:32:16 UTC 2021There was an unexpected error (type=Not Found, status=404).No message availablerestCLIENT_MAIN.BaseURL:https://api.binance.com/
restREQUEST_MAIN.Resource:sapi/v1/broker/info
restREQUEST_MAIN.ResourceSuffix:timestamp=1617298336054&signature=<SECRET_KEY>
Однако с POSTMAN результат будет другим: Поскольку я не могу отправить правильное время (окно возможности меньше 1 секунды), я подозреваю, что potman всегда будет выдавать мне такую ошибку.
{
"code": -1021,
"msg": "Timestamp for this request is outside of the recvWindow."
}
кто-нибудь может направить меня?
Все, что является СЕКРЕТНЫМ, не следует отправлять как есть. Чаще всего он используется для создания HMAC вместе с другой информацией запроса, такой как параметры и отметка времени.
Я не думаю, что
timestamp
иsignature
следует передавать какResourceSuffix
, а скорее как параметры.