我最近开始测试 Binance REST API,但一直无法获得任何帐户信息。我一直收到相同的错误代码 -1021 此请求的时间戳在 recvWindow 之外。不确定可能是什么问题。我已经三重检查我的系统是否与 NTP 同步,并且它与其他系统的匹配。我尝试将默认的 recvWindow 增加到 50 秒而不是默认的 5 秒,但没有运气。我应该会收到 API 文档中所示的 JSON 响应。我在下面粘贴了我的 bash 脚本。
https://www.binance.com/restapipub.html
更新的工作代码
#!/bin/bash
APIKEY="<PUBLIC-KEY-HERE>"
APISECRET="<SECRET-KEY-HERE>"
RECVWINDOW=5000 # 5 seconds
RECVWINDOW='recvWindow='$RECVWINDOW
TIMESTAMP=$(( $(date +%s) *1000))
TIMESTAMP='timestamp='$TIMESTAMP
QUERYSTRING=$RECVWINDOW"&"$TIMESTAMP
SIGNATURE=`echo -n $QUERYSTRING | openssl dgst -sha256 -hmac $APISECRET`
SIGNATURE=`echo $SIGNATURE|cut -c 10-`
SIGNATURE='signature='$SIGNATURE
curl -H "X-MBX-APIKEY: $APIKEY" -X GET 'https://api.binance.com/api/v3/account?'$RECVWINDOW'&'$TIMESTAMP'&'$SIGNATURE
echo
echo RecvWindow:$RECVWINDOW
echo Timestamp:$TIMESTAMP
echo Signature:$SIGNATURE
echo
Run Code Online (Sandbox Code Playgroud)
小智 10
您需要将 date +%s 乘以 1000 才能得到毫秒,因为:
man date
%s seconds since 1970-01-01 00:00:00 UTC
Run Code Online (Sandbox Code Playgroud)
那是几秒钟。
所以我冒昧地编辑你的代码:
#!/bin/bash
read APIKEY APISECRET <<< $(cat apibinance | cut -f2 -d " ");
RECVWINDOW=50000
RECVWINDOW="recvWindow=$RECVWINDOW"
TIMESTAMP="timestamp=$(( $(date +%s) *1000))"
QUERYSTRING="$RECVWINDOW&$TIMESTAMP"
SIGNATURE=$(echo -n "$QUERYSTRING" | openssl dgst -sha256 -hmac $APISECRET | cut -c 10-)
SIGNATURE="signature=$SIGNATURE"
curl -s -H "X-MBX-APIKEY: $APIKEY" "https://api.binance.com/api/v3/account?$RECVWINDOW&$TIMESTAMP&$SIGNATURE" | jq '.'
echo
Run Code Online (Sandbox Code Playgroud)
考虑“apibinance”是一个文件,包含:
cat apibinance
key yourkey
sec yoursecret
Run Code Online (Sandbox Code Playgroud)