币安API鉴权签名
说明
- 币安账户和交易接口需要使用
HMAC SHA256
算法签名,将SECRET_KEY
作为密钥,其他所有参数转为query_string
作为操作对象,得到的输出即为签名,作为http请求参数signature
。
- 除
signature
外,query_string
中的参数顺序和内容要与http请求的参数完全一致。
- 获取签名的核心代码为
hmac.new(SECRET_KEY.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
timestamp
为13位毫秒时间戳,在所有接口中都是必须的,币安服务器收到请求后,如果发现当前服务器毫秒时间戳 > timestamp + recvWindow
或当前服务器时间毫秒戳 < timestamp - 1000
,会拒绝请求,recvWindow
是可选参数,默认值5000,单位毫秒
- 请求头要加上
X-MBX-APIKEY
,值为API_KEY
的值
Python代码
import hmac
import json
import platform
import time
import hashlib
from urllib.parse import urlencode
import requests
base_url = "https://www.binance.com" # 实盘
# base_url = "https://testnet.binancefuture.com" # 模拟
API_KEY = "XXXXXXXXXX"
SECRET_KEY = "XXXXXXXXXX"
headers = {"X-MBX-APIKEY": API_KEY}
def hashing(params):
query_string = urlencode(params, True).replace("%40", "@")
return hmac.new(SECRET_KEY.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
def sign_request(method, url_suffix, params=None, need_log=True, **kwargs):
if params is None:
params = {}
url = base_url + url_suffix
params["timestamp"] = int(round(time.time() * 1000))
params["recvWindow"] = 5000
params["signature"] = hashing(params)
response = requests.request(method=method, url=url, params=params, proxies=proxies, headers=headers, **kwargs)
return json.loads(response.text)
Reference
币安API文档
对接币安接口的心得体会 – CSDN
发表评论