我正在学习如何使用Kucoin,并且在向API服务器验证自己时遇到了问题。
我正在尝试加载所有活动订单,但不断收到401错误。
Kucoin API文档声明我需要添加:
{
"KC-API-KEY": "59c5ecfe18497f5394ded813",
"KC-API-NONCE" : 1506219855000 //Client timestamp (exact to
milliseconds), before using the calibration time, the server does not
accept calls with a time difference of more than 3 seconds
"KC-API-SIGNATURE" :
"fd83147802c361575bbe72fef32ba90dcb364d388d05cb909c1a6e832f6ca3ac"
//signature after client encryption
}
作为请求标头的参数。我不确定这意味着什么。任何帮助将不胜感激。
答案 0 :(得分:1)
创建标题可能有点棘手。
对于nonce值或任何毫秒时间戳值,我发现生成此值的最佳方法是这样的
import time
int(time.time() * 1000)
签名要求您以查询字符串格式按字母顺序排序参数,将其与路径和随机数组合,然后使用sha256使用您的密钥对字符串进行散列。
如果你想自己实现它,可以从这里复制代码,它可以分解为几个函数,并且应该具有可读性https://github.com/sammchardy/python-kucoin/blob/0ece729c406056a428a57853345c9931d449be02/kucoin/client.py#L117
或者您可能最好只使用该库。 (注意:我是python-kucoin的作者和维护者)
答案 1 :(得分:0)
这是我在 Python 3 中的工作代码:
import requests
import json
import hmac
import hashlib
import base64
from urllib.parse import urlencode
import time
api_key = 'xxxxx'
api_secret = 'xx-xxx-xx'
api_passphrase = 'xxx' #this is NOT trading password
base_uri = 'https://api.kucoin.com'
def get_headers(method, endpoint):
now = int(time.time() * 1000)
str_to_sign = str(now) + method + endpoint
signature = base64.b64encode(hmac.new(api_secret.encode(), str_to_sign.encode(), hashlib.sha256).digest()).decode()
passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()
return {'KC-API-KEY': api_key,
'KC-API-KEY-VERSION': '2',
'KC-API-PASSPHRASE': passphrase,
'KC-API-SIGN': signature,
'KC-API-TIMESTAMP': str(now)
}
#List Accounts
method = 'GET'
endpoint = '/api/v1/accounts'
response = requests.request(method, base_uri+endpoint, headers=get_headers(method,endpoint))
print(response.status_code)
print(response.json())
输出
200
{'code': '200000', 'data': [{'available': blah, blah blah }]}