Python 2.7 Bittrex REST API for Python,我想使用API v3创建一个订单https://api.bittrex.com/v3/orders

Python 2.7 Bittrex REST API for Python,我想使用API v3创建一个订单https://api.bittrex.com/v3/orders,python-2.7,python-requests,http-post,bitcoin,restapi,Python 2.7,Python Requests,Http Post,Bitcoin,Restapi,我需要帮助使用bittrex版本3 REST API创建订单。我有下面的代码,我无法理解工作中缺少了什么。 我可以打其他的GET电话,但我不能提出这个POST请求。 我不知道如何处理参数传递 官方文件见 新订单('HEDG',1.1,0.00021) 以及我的错误消息: {u'code': u'BAD_REQUEST', u'data': {u'invalidRequestParameter': u'direction'}, u'detail': u'Refer to the data fiel

我需要帮助使用bittrex版本3 REST API创建订单。我有下面的代码,我无法理解工作中缺少了什么。 我可以打其他的GET电话,但我不能提出这个POST请求。 我不知道如何处理参数传递

官方文件见

新订单('HEDG',1.1,0.00021)

以及我的错误消息:

{u'code': u'BAD_REQUEST', u'data': {u'invalidRequestParameter': u'direction'}, u'detail': u'Refer to the data field for specific field validation failures.'}

从文档中可以看出,api期望该主体为
json
数据:

{
  "marketSymbol": "string",
  "direction": "string",
  "type": "string",
  "quantity": "number (double)",
  "ceiling": "number (double)",
  "limit": "number (double)",
  "timeInForce": "string",
  "clientOrderId": "string (uuid)",
  "useAwards": "boolean"
}
您将这些值设置为
url参数
,这就是问题所在

您需要这样做:

uri = 'https://api.bittrex.com/v3/orders'

# NOTE >>>> please check that you provide all the required fields.
payload = {
    'marketSymbol': 'BTC-HEDG',#'HEDG-BTC', #market
    'direction': 'BUY',
    'type': 'LIMIT',
    'quantity': amount,
    'limit': price,
    'timeInForce': 'POST_ONLY_GOOD_TIL_CANCELLED',
    'useAwards': True
}

# do rest of the stuffs as you are doing

# post payload as json data with the url given in doc
r = requests.post(uri, json=payload, headers=headers, timeout=11)
print(r.json())

如果您还有问题,请告诉我们。如果有效,请将答案标记为已接受。
希望这有帮助。

我对代码做了以下修改,但开始在“内容哈希”中给出错误

我假设一些参数是可选的,所以会对它们进行注释

def NewOrder(market, amount, price):
market = 'BTC-'+market
uri = 'https://api.bittrex.com/v3/orders'

payload = {
    'marketSymbol': market,
    'direction': 'BUY',
    'type': 'LIMIT',
    'quantity': amount,
    #"ceiling": "number (double)",
    'limit': price,
    'timeInForce': 'POST_ONLY_GOOD_TIL_CANCELLED',
    #"clientOrderId": "string (uuid)",
    'useAwards': True
}
#ceiling (optional, must be included for ceiling orders and excluded for non-ceiling orders)
#clientOrderId (optional) client-provided identifier for advanced order tracking

timestamp = str(int(time.time()*1000))
Content = ''+json.dumps(payload, separators=(',',':'))
print Content
contentHash = hashlib.sha512(Content.encode()).hexdigest()

Method = 'POST'
#uri2 = buildURI(uri, payload)#line not used
print uri
#PreSign = timestamp + uri2 + Method + contentHash# + subaccountId
PreSign = timestamp + uri + Method + contentHash# + subaccountId
print PreSign
Signature = hmac.new(apisecret, PreSign.encode(), hashlib.sha512).hexdigest()

headers = {
      'Api-Key' : apikey,
      'Api-Timestamp' : timestamp,
      'Api-Content-Hash': contentHash,
      'Api-Signature' : Signature
}

r = requests.post(uri, json=payload, headers=headers, timeout=11)
print(r.json())

return json.loads(r.content)
新订单('HEDG',1.5,0.00021)


{u'code':u'INVALID_CONTENT_HASH'}

遵循建议,但现在出现错误无效内容HASH确实需要正确计算内容HASH
def NewOrder(market, amount, price):
market = 'BTC-'+market
uri = 'https://api.bittrex.com/v3/orders'

payload = {
    'marketSymbol': market,
    'direction': 'BUY',
    'type': 'LIMIT',
    'quantity': amount,
    #"ceiling": "number (double)",
    'limit': price,
    'timeInForce': 'POST_ONLY_GOOD_TIL_CANCELLED',
    #"clientOrderId": "string (uuid)",
    'useAwards': True
}
#ceiling (optional, must be included for ceiling orders and excluded for non-ceiling orders)
#clientOrderId (optional) client-provided identifier for advanced order tracking

timestamp = str(int(time.time()*1000))
Content = ''+json.dumps(payload, separators=(',',':'))
print Content
contentHash = hashlib.sha512(Content.encode()).hexdigest()

Method = 'POST'
#uri2 = buildURI(uri, payload)#line not used
print uri
#PreSign = timestamp + uri2 + Method + contentHash# + subaccountId
PreSign = timestamp + uri + Method + contentHash# + subaccountId
print PreSign
Signature = hmac.new(apisecret, PreSign.encode(), hashlib.sha512).hexdigest()

headers = {
      'Api-Key' : apikey,
      'Api-Timestamp' : timestamp,
      'Api-Content-Hash': contentHash,
      'Api-Signature' : Signature
}

r = requests.post(uri, json=payload, headers=headers, timeout=11)
print(r.json())

return json.loads(r.content)