{"code":3702,"msg":"Invalid signature.","timestamp":1623848681308}
我使用的是trbinance.com api。我一直收到相同的错误
procedure TForm1.Button1Click(Sender: TObject);
var
url, sign, queryString, nonce: string;
ST: SystemTime;
DT: TDateTime;
uTime: int64;
sHour, sMin, sSec, sMili: Word;
stream, s_url: string;
Post: TStringList;
IdHTTP10 : TIDhttp;
api_key , api_secret : String;
begin
api_key := '**';
api_secret := '**';
GetSystemTime(ST);
DT := EncodeDate(ST.wYear, ST.wMonth, ST.wDay) +
EncodeTime(ST.wHour, ST.wMinute, ST.wSecond, ST.wMilliseconds);
uTime := DateUtils.MilliSecondsBetween(DT, UnixDateDelta);
nonce:=inttostr(uTime);
url :='https://trbinance.com/open/v1/orders';
queryString := 'symbol=BTT_TRY&side=0&type=1&quantity=1&price=0.0022&recvWindow=5000×tamp='+nonce;
sign := THashSHA2.GetHMAC(queryString, api_secret, SHA256);
IdHTTP10 := TidHTTP.Create(nil);
IdHTTP10.HandleRedirects := True;
IdHTTP10.Request.CustomHeaders.Add('X-MBX-APIKEY:'+api_key);
IdHTTP10.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
Post:=TStringList.Create;
Post.Add('quantity=1&');
Post.Add('price=0.0022&');
Post.Add('recvWindow=5000&');
Post.Add('timestamp='+nonce+'&');
Post.Add('signature='+sign);
s_url := url + '?symbol=BTT_TRY&side=0&type=1';
try
stream:=IdHTTP10.POST(s_url, Post);
Memo1.Lines.Add(stream);
except
on E: Exception do
Memo1.Lines.Add(TimeToStr(time)+' <---> [Order] error: '+E.Message);
end;
IdHTTP10.Free;
Post.Free;
end;
总是问题:
{"code":3702,"msg":"Invalid signature.","timestamp":1623848681308}
Normaly Binance Symbol : BTTTRY
Turkey Api : BTT_TRY
Normaly Binance Order Url : httpps://api.binance.com/api/v3/order
Turkey Api Order Url : https://trbinance.com/open/v1/orders
问题出在哪里?
非常感谢你。
4条答案
按热度按时间lp0sw83n1#
谢谢你的回答。我改进了代码。
有需要的朋友可以在 Delphi 中使用这个程序。(对于Global Binance Api)
此代码适用于Global Binance Api。
更改符号:BTTTRY -〉BTT_TRY和帖子URL:- -----
t不工作,结果:
此程序适用于“全局Binance Api”,但不适用于“事务Binance Api”
相同的过程在“trbinance api”中给出“无效签名”错误。:(
事务API示例:
HMAC SHA 256签名:
curl命令:
holgip5t2#
这段代码有很多问题,但我看到的最大的一个问题是,你不应该在你的
TStringList
字符串中包含尾随的&
字符,例如:TIdHTTP.Post()
将为您将这些&
字符插入到请求正文中,因此传输的数据与您签名的数据不同。yzuktlbb3#
根据Binance TR API文件:
使用secretKey作为HMAC操作的键,使用totalParams作为HMAC操作的值。totalParams定义为与请求正文连接的查询字符串。
来自API的文本为“签名无效”的错误。可能会给予您签名算法存在问题:
此处的代码仅对查询字符串进行签名,但根据API文档,您必须对与请求正文连接的查询字符串进行签名。
所以,你需要这样修改你的代码(“Post”变量必须在这一行之前初始化):
pxyaymoc4#
谢谢您提供的各种解决方案,但我测试后还是有问题,无法正常执行,因为以前我是用B4 J写的系统正常连接Binance进行交易的,后来。我发现在 Delphi 中使用*TidHTTP*组件连接Binance有问题。我一直收到Http/1.1 400错误请求。我使用TNetHTTPClient而不是连接到Binance。非常高兴,我成功了。下面是我成功测试的程序,在Binance上下订单,希望对你有帮助。
结束;