如何在delphi 10.3中为Poloniex生成API签名

问题描述 投票:0回答:1

我正在尝试使用 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'

谢谢大家的帮助。

api signature
1个回答
0
投票

我就是这样做的。但这不起作用。 :(

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;
© www.soinside.com 2019 - 2024. All rights reserved.