2017-02-02 24 views
0

У меня есть серьезная проблема с изменением примерного кода PHP на эквивалент в python. Ниже приведен пример кода PHP:Bitmarket.pl API переводится с PHP на Python

function bitmarket_api($method, $params = array()) 

{ 
    $key = "klucz_jawny"; 
    $secret = "klucz_tajny"; 

    $params["method"] = $method; 
    $params["tonce"] = time(); 

    $post = http_build_query($params, "", "&"); 
    $sign = hash_hmac("sha512", $post, $secret); 
    $headers = array(
     "API-Key: " . $key, 
     "API-Hash: " . $sign, 
    ); 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_URL, "https://www.bitmarket.pl/api2/"); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
    $ret = curl_exec($curl); 

    return json_decode($ret); 
} 

Заранее спасибо за любую помощь.

UPDATE:

Мой код:

apiurl = "https://www.bitmarket.pl/api2/" 
key = "mypubkey" 
secret = "myceretkey" 

apicommand = "info" 
tonce = time.time() 

params = str(apicommand) + " " + str(tonce) 

postdata = (params + " " + "&") 

signdata = hmac.new(postdata, secret, hashlib.sha512).hexdigest() 

headerapi = { "API-Key: ": key, 
"API-Hash: " : signdata} 



getapi = requests.post(apiurl, data=headerapi ,params=postdata) 
print getapi.text 

Результат: { "Ошибка": 501, "ErrorMsg": "Неверный ключ API", "время": 1486049060}

+0

Вчера Я потратить несколько часов, пытаясь отправить правильный запрос через запросы python и urllib2 теперь я удалил весь код, потому что он НЕ работал вообще. Каждый запрос был завершен с неправильным сообщением auth. Если бы кто-то просто дал мне знать, как должны выглядеть данные для публикации. Я не знаю PHP, поэтому мне сложно понять это. – MichalM

+0

Вы пробовали Google: «Опубликовать данные с помощью python»? –

+0

Да, я думаю, что все дело в том, что я отправляю неверные данные. apiurl = "https://www.bitmarket.pl/api2/" apidata = hmac.new ("info", secret_key_here, hashlib.sha512) .hexdigest() getapi = запросы.post (apiurl, data = apidata) – MichalM

ответ

0

Посмотрите на

Curl issue in subprocess Python

Я точно указать то, что вы просите, другой то для кого-то, чтобы перевести PHP на Python для вас (. это вы должны получить около 90% пути там)

1

Решение:

def mergeTwoDicts(x, y): 
    z = x.copy() 
    z.update(y) 
    return z 


def bitMarketPlApiCall(method, params = {}): 
    postDataAsDict = mergeTwoDicts(params, { 
     'method': method, 
     'tonce': int(time.time()) 
    }) 
    postParamsAsString = "&".join([param + '=' +  str(postDataAsDict[param]) for param in postDataAsDict]) 

    postHeaders = { 
     'API-Key': publicKey, 
     'API-Hash': hmac.new(secretKey, postParamsAsString, hashlib.sha512).hexdigest() 
} 

    request_response = requests.post('https://www.bitmarket.pl/api2/', data = postParamsAsString, headers = postHeaders) 

    return request_response.text