我不是贸易开发商,所以请放轻松我。
我一直在研究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.'¤cy=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+'¤cy='+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}。
我已经花了几天时间而未能通过它。任何帮助将不胜感激。
答案 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。