(Python)Bittrex API v3不断返回无效内容哈希



为个人项目编写bot,Bittrex api拒绝验证我的内容哈希。我试过了我能想到的一切,也试过了类似问题的所有建议,但到目前为止都没有效果。尝试散列"None",尝试空白字符串,尝试货币符号,尝试整个uri,尝试命令&平衡,尝试了其他一些同样无效的事情。重新格式化请求几次(字节/字符串/dict(,仍然没有。

文档中说要对请求主体进行散列(在通过api进行事务的类似问题中,这似乎与有效负载同义(,但这是一个简单的get/chccek平衡请求,没有有效负载。

问题是,当我运行它时,我得到了一个"比特树错误:无效内容哈希"的响应。

任何帮助都将不胜感激,这感觉像是一个简单的问题,但它让我非常沮丧。我是python的新手,但机器人的其他部分运行得很好,这让我无法将其连接到我的帐户更加沮丧:/

import hashlib
import hmac
import json
import os
import time
import requests
import sys
# Base Variables
Base_Url = 'https://api.bittrex.com/v3'
APIkey = os.environ.get('B_Key')
secret = os.environ.get('S_B_Key')
timestamp = str(int(time.time() * 1000))
command = 'balances'
method = 'GET'
currency = 'USD'
uri = Base_Url + '/' + command + '/' + currency
payload = ''
print(payload)  # Payload Check
#  Hashes Payload
content = json.dumps(payload, separators=(',', ':'))
content_hash = hashlib.sha512(bytes(json.dumps(content), "utf-8")).hexdigest()
print(content_hash)
#  Presign
presign = (timestamp + uri + method + str(content_hash) + '')
print(presign)
# Create Signature
message = f'{timestamp}{uri}{method}{content_hash}'
sign = hmac.new(secret.encode('utf-8'), message.encode('utf-8'), 
hashlib.sha512).hexdigest()
print(sign)
headers = {
'Api-Key': APIkey,
'Api-Timestamp': timestamp,
'Api-Signature': sign,
'Api-Content-Hash': content_hash
}
print(headers)
req = requests.get(uri, json=payload, headers=headers)
tracker_1 = "Tracker 1: Response =" + str(req)
print(tracker_1)
res = req.json()
if req.ok is False:
print('bullshit error #1')
print("Bittex response: %s" % res['code'], file=sys.stderr)

我可以看到两个主要问题:

  1. 您正在分别对哈希(先使用json.dumps,然后使用bytes(和请求(使用json=payload参数到request.get(的有效负载进行串行化/编码。您无法知道请求库将如何格式化您的数据,即使一个字节不同,您也会得到不同的哈希。最好先将数据转换为字节,然后将相同的字节用于哈希和请求体。

  2. GET请求通常没有正文(有关更多详细信息,请参阅此回答(,因此API可能忽略了您正在发送的有效负载。您应该查看API文档,看看您是否真的需要发送带有GET请求的请求主体。

最新更新