'时间戳请求已过期','代码':'50102'

问题描述 投票:0回答:2

我正在尝试从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。

python timestamp
2个回答
2
投票

问题是你在对他们撒谎,抓住当地时间并任意加上“Z”来声称它是 UTC。 除非您生活在 GMT+0 时区,否则这是错误的。

如果您查看文档,您会发现有一个

utcnow
方法正是针对这种情况而设计的:

        timestamp = datetime.utcnow().isoformat(timespec='milliseconds') + 'Z'

0
投票

您可以使用 /api/v5/public/time 获取系统时间

© www.soinside.com 2019 - 2024. All rights reserved.