php - Python 3.6 Bittrex API 无效签名

标签 php python-3.x

我不是开发人员,所以请对我放宽点。

我一直在研究 Bittrex API,以此自学 Python 和 API。在切换到 Python 3.6 之前,我通过大量 Stack Overflow 搜索设法让它在 PHP 中工作。现在我又卡在了需要散列和签名的部分。

我的功能性 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}。

我在这上面花了几天时间,但一直没能通过。任何帮助将不胜感激。

最佳答案

你必须使用

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

代替

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

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

代替

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

关于php - Python 3.6 Bittrex API 无效签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264492/

相关文章:

python - Numpy:使用索引列表将值分配给二维数组

python-3.x - 如何将虚拟变量列转换为多列?

python - 用 Anaconda 安装了一个包,无法在 Python 中导入

php - 只有 true 语句的条件运算符

php - 如何选择查询的逆

php - 查询不插入,但也不报错

python - 在保持平衡的同时将不良球员与优秀球员配对

php - 显示每种颜色的值

php - FFMPEG 与 PHP 不执行?

python-3.x - 当月份为小数位时,将 float 转换为日期时间(YYYY.MM float )