gpt4 book ai didi

android - 如何使用 Dart 签署 Binance HTTP 请求

转载 作者:行者123 更新时间:2023-11-29 05:54:19 25 4
gpt4 key购买 nike

当我尝试发出请求时,收到以下错误消息:

code: -1100, 
msg: Illegal characters found in parameter 'signature'; legal range is '^[A-Fa-f0-9]{64}$'

币安 API 链接:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md

请求已发送至 https://api.binance.com/api/v3/account 。查询参数只是时间戳,因为它是必需的。

我 100% 确定我签署消息的方式有问题。我确定,因为它包含像“+-/_=”这样的字符,这显然是不允许的。错误肯定是在代码中间部分的某个地方,但我似乎无法弄清楚。

我已经浏览过以下网站:

String baseUrl = 'https://api.binance.com/api/v3/account';
int timeStamp = DateTime.now().millisecondsSinceEpoch;
String queryParams = 'timestamp=' + timeStamp.toString();
String secret = 'SECRET_KEY_HERE';

List<int> messageBytes = utf8.encode(queryParams);
List<int> key = base64.decode(secret);
Hmac hmac = new Hmac(sha256, key);
Digest digest = hmac.convert(messageBytes);
String signature = base64.encode(digest.bytes);
String url = baseUrl + "?" + "signature=" + signature + "&" + queryParams;

var response = await http.get(
url,
headers: {
"Accept": "application/json",
"HTTP_ACCEPT_LANGUAGE": "en-US",
"Accept-Language": "en-US",
"X-MBX-APIKEY": "API_KEY_HERE"
}
);

print(response.body);

编辑 - 工作签名

String baseUrl = 'https://api.binance.com/api/v3/account?';
int timeStamp = DateTime.now().millisecondsSinceEpoch;
String queryParams = 'recvWindow=5000' + '&timestamp=' + timeStamp.toString();
String secret = 'SECRET_KEY_HERE';

List<int> messageBytes = utf8.encode(queryParams);
List<int> key = utf8.encode(secret);
Hmac hmac = new Hmac(sha256, key);
Digest digest = hmac.convert(messageBytes);
String signature = hex.encode(digest.bytes);
String url = baseUrl + queryParams + "&signature=" + signature;

var response = await http.get(
url,
headers: {
"Accept": "application/json",
"HTTP_ACCEPT_LANGUAGE": "en-US",
"Accept-Language": "en-US",
"X-MBX-APIKEY": "API_KEY_HERE"
}
);

print(response.body);

最佳答案

您的 API 要求签名以十六进制表示 - 因此正则表达式 '^[A-Fa-f0-9]{64}$' - 即 64 个十六进制大写或小写字符.

不要使用将字节转换为 Base 64 的 base64.encode(digest.bytes),而是使用 convert 将字节转换为十六进制。包裹。注意:这不是dart:convert库。它是一个 pub 包,因此您必须将其添加到 pubspec.yaml 并导入它。

然后你可以使用hex.encode(digest.bytes)

关于android - 如何使用 Dart 签署 Binance HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com