Я пытался заставить API Bter.com работать с Python3 и чувствую, что он должен работать.
В настоящее время я получаю эту ошибку при отправке запроса через:
{'code': 5, 'result': 'false', 'message': 'Error: invalid key or sign'}
Ниже вы найдете пример в PHP, который они имеют на своем сайте:
function bter_query($path, array $req = array()) {
// API settings, add your Key and Secret at here
$key = '';
$secret = '';
// generate a nonce to avoid problems with 32bits systems
$mt = explode(' ', microtime());
$req['nonce'] = $mt[1].substr($mt[0], 2, 6);
// generate the POST data string
$post_data = http_build_query($req, '', '&');
$sign = hash_hmac('sha512', $post_data, $secret);
// generate the extra headers
$headers = array(
'KEY: '.$key,
'SIGN: '.$sign,
);
//!!! please set Content-Type to application/x-www-form-urlencoded if it's not the default value
// curl handle (initialize if required)
static $ch = null;
if (is_null($ch)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT,
'Mozilla/4.0 (compatible; Bter PHP bot; '.php_uname('a').'; PHP/'.phpversion().')'
);
}
curl_setopt($ch, CURLOPT_URL, 'https://bter.com/api/'.$path);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// run the query
$res = curl_exec($ch);
if ($res === false) throw new Exception('Curl error: '.curl_error($ch));
//echo $res;
$dec = json_decode($res, true);
if (!$dec) throw new Exception('Invalid data: '.$res);
return $dec;
}
Я пытался воспроизвести это как можно лучше, но все равно получаю ошибку, как указано выше.
Вот мой код:
def __nonce(self):
if self.__wait_for_nonce: time.sleep(1)
self.__nonce_v = str(time.time()).split('.')[0]
def __api_call(self,method,params):
self.__nonce()
params['nonce'] = str(self.__nonce_v)
params = urlencode(params)
sign = hmac.new(self.__api_secret.encode(), params.encode(), hashlib.sha512).hexdigest()
headers = {"Content-type": "application/x-www-form-urlencoded",
"Key": self.__api_key,
"Sign": sign}
response = requests.post("https://bter.com/api/1/private/"+method, params, headers)
data = response.json()
return data
Я изо всех сил пытаюсь найти ошибку. Я связался со службой поддержки Bter, которая только что вернула меня обратно в API Docs. Я также попытался сгенерировать новый ключ API и секрет несколько раз сейчас, и у меня та же ошибка. Я чувствую, что это должно быть так, как я подписываю подпись в шапке.
Любая помощь будет принята с благодарностью.
Задача ещё не решена.
Других решений пока нет …