Python 3.6 Bittrex API INVALID_SIGNATURE

时间:2018-05-10 02:13:32

标签: php python-3.x

我不是贸易开发商,所以请放轻松我。

我一直在研究Bittrex API,以此来教我自己的Python和API。在切换到Python 3.6之前,我设法在PHP中使用了大量的Stack Overflow搜索。现在我再次陷入需要散列和签名的部分。

我的功能PHP代码:

<?php

$apikey='...';
$apisecret='...';
$nonce=time();
$uri='https://bittrex.com/api/v1.1/account/getbalance? 
$apikey='.$apikey.'&nonce='.$nonce.'&currency=BTC';
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$execResult = curl_exec($ch);
$data=curl_exec($ch);

echo $data      

?>

Python等价物:

import urllib.request
import json
import collections
import time
import hashlib
import hmac
nonce = str('{:10.0f}'.format(time.time()))
apikey = '...'
apisecret = '...'
BaseCurrency = 'BTC'
url = 'https://bittrex.com/api/v1.1/account/getbalance? 
apikey='+apikey+'&nonce='+nonce+'&currency='+BaseCurrency
sign = hmac.new(b'apisecret', b'url', hashlib.sha512).hexdigest()
request = urllib.request.Request(url, headers={"apisign" : sign})
balance = json.load(urllib.request.urlopen(request))

print(balance)

返回{'success':False,'message':'INVALID_SIGNATURE','result':None}。

我已经花了几天时间而未能通过它。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您必须使用

apikey = b'...'
apisecret = b'...'

代替

apikey = '...'
apisecret = '...'

sign = hmac.new(apisecret, url, hashlib.sha512).hexdigest()

代替

sign = hmac.new(b'apisecret', b'url', hashlib.sha512).hexdigest()

答案 1 :(得分:0)

我知道这已经很老了,但是在处理连接之前我有点挣扎,这是我的代码:

api_secret='...'
api_key='...'
url='https://bittrex.com/api/v1.1/account/getbalances?apikey='+api_key+'&nonce='+str(time.time())
sign=hmac.new(bytes(api_secret,encoding='utf-8'),bytes(url,encoding='utf-8'),hashlib.sha512).hexdigest()


req = urllib.request.Request(url, headers={"apisign" : sign})
account=urllib.request.urlopen(req).read()
account_j=json.loads(account)

print(account_j)

打开请求后,我必须read()以便正确处理json。