我正在尝试使用 delphi 10.3 中的 Spot API menthotl 访问 Ponolinex.com。但我不知道如何生成 API 签名。
这是 Poloniex 的构造: 请帮助我啊啊啊啊…… :( :(
签名示例代码 我们提供了 Java/Python/NodeJS 三种语言的签名代码,以及请求代码的示例,请参见此处。
API签名生成 步骤:
编写一个用于生成数字签名的“请求字符串”,其中包括: 方法类型(GET/POST/DELETE/等)后跟“ “例如获取 访问路径,遵循“ “例如/订单 添加时间戳参数和按 ASCII 顺序排序的参数列表,并用 & 分隔,例如: limit=5&signTimestamp=1659259836247&symbol=ETH_USDT 注意:所有参数必须采用 URL/UTF-8 编码。即空格被编码为“%20” 根据上面的示例值,签名生成的最终字符串将是: 得到 /命令 限额=5&符号=ETH_USDT 带有 http body 的 DELETE 或 POST 方法,例如: 通过 ID 取消订单: /订单/cancelByIds 添加 requestBody 和时间戳: requestBody={"orderIds":["1234567890"],"clientOrderIds":["myId-1"]} 签名时间戳=1631018760000 需要添加时间戳。时间戳的有效期为 1 分钟。将以上顺序的参数用字符“&”连接起来: requestBody={"orderIds":["1234567890"],"clientOrderIds":["myId-1"]}&signTimestamp=1631018760000} 最终用于签名计算的字符串组成如下: 删除 /订单/cancelByIds/ 没有 http body 的 DELETE 或 POST 方法,例如:按 ID 取消订单:/orders/1 需要添加时间戳。时间戳的有效期为 1 分钟。
signTimestamp=1631018760000
最终用于签名计算的字符串组成如下:
删除
/订单/1
签名时间戳=1631018760000
使用上一步中生成的“请求字符串”和您的密钥(秘密密钥)生成数字签名:
以上一步获取的请求字符串和API私钥为两个参数,调用HmacSHA256哈希函数获取哈希值。
使用 base-64 对该哈希值进行编码,所得值将用作此接口调用的数字签名。
示例:5g4Rx5A2bLyMWFgR3Aqp+B4w+iJkL7n5OD3SuYtCJK8=
使用上面生成的签名的请求示例:
注意:POST\DELETE 请求应包含 application/json 类型内容并采用有效的 JSON 格式。
示例 GET 命令:
curl -X GET
--header '密钥:A3xxxxxx-99xxxxxx-84xxxxxx-72xxxxxx'
--header 'signatureMethod: HmacSHA256'
--header 'signatureVersion: 2'
--header 'signTimestamp: 1631018760000'
--header '签名:5g4Rx5A2bLyMWFgR3Aqp+B4w+iJkL7n5OD3SuYtCJK8='
'https://api.poloniex.com/orders?symbol=ETH_USDT&limit=5'
谢谢大家的帮助。
我就是这样做的。但这不起作用。 :(
procedure Tfmain.BitBtn7Click(Sender: TObject);
var
Parameters: TStringList;
Json_data,Sign_HMAC,Coin_name: String;
NetHTTPClient:TNetHTTPClient;
Response: IHTTPResponse;
Vdata:TMemoryStream;
VHeader:TMemoryStream;
JsonValue: TJSONValue;
JsonObject,JsonObject1: TJSONObject;
jSubPar : TJSONPair;
i:Integer;
v_available,v_onorder:real;
begin
try
NetHTTPClient:=TNethttpClient.Create(nil);
Sign_HMAC := THashSHA2.GetHashString(Secretkey, SHA256);
NetHTTPClient.CustomHeaders['key'] := APIKey;
NetHTTPClient.CustomHeaders['signatureMethod'] := 'HmacSHA256';
NetHTTPClient.CustomHeaders['signatureVersion'] := '2';
NetHTTPClient.CustomHeaders['signTimestamp'] := Get_time(9.5);
NetHTTPClient.CustomHeaders['signature'] := Sign_HMAC;
Response:=NetHTTPClient.Get(E_post.Text);
finally
NetHTTPClient.Free;
end;
end;