Binance API密钥

10
我在Binance上设置了只读API密钥,以访问账户信息,如货币余额,但我无法看到JSON数据。我放入URL的字符串查询返回以下错误:
{"code":-2014,"msg":"API-key format invalid."}
我使用的URL是:https://api.binance.com/api/v3/account?X-MBX-APIKEY=**key**&signature=**s-key**
Binance API的文档可以在此找到:https://www.binance.com/restapipub.html。我做错了什么?

我也想连接到币安。从文档中并不清楚如何做到这一点,更重要的是,我甚至无法创建API密钥。当我进入创建API密钥的界面时,点击创建密钥的按钮没有任何反应。 - Christian Findlay
https://developers.binance.com/docs/binance-api/spot/index/ - carloswm85
9个回答

4
Binance的WebSocket API使用起来有些棘手。而且没有办法使用密钥。
常见用法:
1. 使用您的秘密API密钥作为“X-MBX-APIKEY”标头发送HTTP POST请求至https://api.binance.com/api/v1/userDataStream
2. 您将获得应用于WebSocket连接的侦听密钥。它将在1小时内可用。
{"listenKey": "your listen key here"}
3. 连接到Binance的WebSocket时使用它。
Python示例
import ssl
from websocket import create_connection

import requests

KEY = 'your-secret-key'
url = 'https://api.binance.com/api/v1/userDataStream'
listen_key = requests.post(url, headers={'X-MBX-APIKEY': KEY})['listenKey']
connection = create_connection('wss://stream.binance.com:9443/ws/{}'.format(KEY), 
                               sslopt={'cert_reqs': ssl.CERT_NONE})

1
这是正确的,除了您必须在X-MBX-APIKEY标头中发送API密钥而不是API密钥,不需要签名。 - Ultranuke

2
您将其放在页眉中。以下是经过测试的PHP示例,借鉴自jaggedsoft Binance PHP库,它是一个签名请求,将返回帐户状态。
$api_key = "cool_key";
$secret = "awesome_secret";

$opt = [
  "http" => [
    "method" => "GET",
    "header" => "User-Agent: Mozilla/4.0 (compatible; PHP Binance API)\r\nX-MBX-APIKEY: {$api_key}\r\n"
  ]
];
$context = stream_context_create($opt);
$params['timestamp'] = number_format(microtime(true)*1000,0,'.','');
$query = http_build_query($params, '', '&');
$signature = hash_hmac('sha256', $query, $secret);
$endpoint = "https://api.binance.com/wapi/v3/accountStatus.html?{$query}&signature={$signature}";

$res = json_decode(file_get_contents($endpoint, false, $context), true);

2
def get_listen_key_by_REST(binance_api_key):
    url = 'https://api.binance.com/api/v1/userDataStream'
    response = requests.post(url, headers={'X-MBX-APIKEY': binance_api_key})  # ['listenKey']
    json = response.json()
    return json['listenKey']


print(get_listen_key_by_REST(binance_api_key))


def get_all_orders(symbol, binance_api_key, binance_secret_key):
    """Get all account orders; active, canceled, or filled.
    Args:   symbol: Symbol name, e.g. `BTCUSDT`.
    Returns:
    """

    from datetime import datetime, timezone, timedelta
    now = datetime.now(timezone.utc)
    epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)  # use POSIX epoch
    posix_timestamp_micros = (now - epoch) // timedelta(microseconds=1)
    posix_timestamp_millis = posix_timestamp_micros // 1000  # or `/ 1e3` for float

    import hmac, hashlib
    queryString = "symbol=" + symbol + "&timestamp=" + str(
        posix_timestamp_millis)
    signature = hmac.new(binance_secret_key.encode(), queryString.encode(), hashlib.sha256).hexdigest()
    url = "https://api.binance.com/api/v3/allOrders"
    url = url + f"?{queryString}&signature={signature}"
    response = requests.get(url, headers={'X-MBX-APIKEY': binance_api_key})
    return response.json()

1

X-MBX-APIKEY 应该被设置为HTTP头部的一个字段,而不是HTTP参数。请参见this page以获取有关HTTP头部字段的更多信息。 然而,我尝试在Excel中使用类似方式时一直无法运行。

另一个未解决的问题是如何使用密钥。


1
这对我有用:

这适用于我:

base_url="https://api.binance.com"
account_info="/api/v3/account"

url="${base_url}${account_info}"

apikey="your_apikey"
secret="your_secret"

queryString="timestamp=$(date +%s)" #$(python3 binance_time.py) must sync
requestBody=""

signature="$(echo -n "${queryString}${requestBody}" | openssl dgst -sha256 -hmac $secret)"
signature="$(echo $signature | cut -f2 -d" ")"

req=$(curl -H "X-MBX-APIKEY: $apikey" -X GET "$url?$queryString&signature=$signature")
echo $req

1
这是什么编程语言? - clst
这是Python。 - Abhishek Soni

0

0

您应该将API密钥设置在请求头中,而不是作为请求URL中的参数。请提供有关您的请求过程(语言等)的更多信息。


0
        _httpClient.DefaultRequestHeaders.Add("X-MBX-APIKEY", "apikey");
        _httpClient.DefaultRequestHeaders.Add("SecretKey", "secretkey");

请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么的解释以及为什么您认为这是最好的方法? - Jeremy Caney
@JeremyCaney 我稍后会编辑我的答案。 - user9887190

-2

1
这并没有增加其他答案已经提到的任何内容。 - Blue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接