我正在尝试从okcoin.com检索用户数据,Python代码:
base_url = 'https://www.okcoin.com'
endpoint = '/api/v5/account/balance'
params = {'ccy': 'BTC,STX'}
timestamp = datetime.now().isoformat(timespec='milliseconds') + 'Z'
sign = timestamp + 'GET' + endpoint
secret_key = base64.b64decode(okcoin_api_secret)
signature = hmac.new(secret_key, sign.encode(), hashlib.sha256).hexdigest()
print(f'OKcoin timestamp: {timestamp}')
headers = {
'OK-ACCESS-KEY': okcoin_api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': okcoin_api_passphrase,
'Content-Type': 'application/json'
response = requests.get(base_url + endpoint, params=params, headers=headers)
data = response.json()
return data
所有 API 调用要求,请参见此处 https://www.okcoin.com/docs-v5/en/#rest-api-authentication-generate-an-apikey,检查多次但返回:
{'msg': 'Timestamp request expired', 'code': '50102'}
尝试将时间戳调回一小时,但没有效果。 问了okcoin支持,他们也不知道。 尝试了几个不同的TZ,结果相同。 我会很感激任何线索。 有趣的细节是,类似的模式适用于 Kucoin 和 Binance。
问题是你在对他们撒谎,抓住当地时间并任意加上“Z”来声称它是 UTC。 除非您生活在 GMT+0 时区,否则这是错误的。
如果您查看文档,您会发现有一个
utcnow
方法正是针对这种情况而设计的:
timestamp = datetime.utcnow().isoformat(timespec='milliseconds') + 'Z'
您可以使用 /api/v5/public/time 获取系统时间