我最近开始测试Binance REST API但无法获取任何帐户信息。我一直收到相同的错误 Code -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
答案 0 :(得分:1)
你需要将日期+%s乘以1000,这样你才能得到毫秒,因为:
man date
%s seconds since 1970-01-01 00:00:00 UTC
那是秒。
所以我冒昧地编辑你的代码:
#!/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
认为“apibinance”是一个文件并包含:
cat apibinance
key yourkey
sec yoursecret