2016-06-24 4 views
-1

Я получаю этот код ошибки (я использую публичный API, так что это, безусловно, работает на их стороне;)):PHP - HMAC Authentication

HMAC ключ аутентификации и подпись была дана, но они инвалид.

function get_myself($request){ 
    $public_key = "MY_PUBLIC_KEY"; 
    $secret = "MY_PRIVATE_KEY"; 

    $parameters = array(
     "client_id" => $public_key, 
     "client_secret" => $secret 
    ); 
    $data = http_build_query($parameters); 

    $ch = curl_init("https://localbitcoins.com".$request); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, "curl"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    $nonce = time(); 
    $sig = base64_encode (hash_hmac("sha256", $nonce.$public_key.$request, $secret)); 
    $options = array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_TIMEOUT => 30, 
     CURLOPT_HTTPHEADER => array(
      "Apiauth-Key:".$public_key, 
      "Apiauth-Nonce:".$nonce, 
      "Apiauth-Signature:".$sig 
     ), 
    ); 
    curl_setopt_array($ch, $options); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    return $result; 
} 

$getinfo = array(); 
$getinfo = get_myself("/api/myself/"); 
echo "<pre>"; print_r($getinfo); echo "</pre>"; 
+0

https://localbitcoins.com/api-docs/errors/ говорит, что вы должны «Обеспечить достоверность ключа, секретного и подпись расчета.» – moxn

+1

У меня есть учетные данные в порядке, это не то, где проблема возникает ... На всякий случай, если кто-то еще имеет эту проблему, я нашел онлайн другой код, который работает ... Я отправлю его ниже;) –

ответ

1

После 3-х дней, я нашел 'решение' ... вот рабочий пример:

function localbitcoins_query($path, array $req = Array()) { 
    $key='MY_KEY'; 
    $secret='MY_SECRET'; 
    $mt = explode(' ', microtime()); 
    $nonce = $mt[1].substr($mt[0], 2, 6); 
    if ($req) { 
     $get=httpbuildquery($req); 
     $path=$path.'?'.$get; 
    } 
    $postdata=$nonce.$key.$path; 
    $sign = strtoupper(hash_hmac('sha256', $postdata, $secret)); 
    $headers = array(
     'Apiauth-Signature:'.$sign, 
     'Apiauth-Key:'.$key, 
     'Apiauth-Nonce:'.$nonce 
    ); 
    $ch = null; 
    $ch = curl_init('https://localbitcoins.com'.$path); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); 
    $res = curl_exec($ch); 
    if ($res === false) throw new Exception('Curl error: '.curlerror($ch)); 
    $dec = json_decode($res, true); 
    if (!$dec) throw new Exception('Invalid data: '.$res); 
    curl_close($ch); 
    return $dec; 
} 

$getinfo = array(); 
$devise = "EUR"; 
$url = "/buy-bitcoins-online/".$devise."/western-union/.json"; 

$getinfo = localbitcoins_query($url); 
echo "<pre>"; print_r($getinfo); echo "</pre>"; 

Это работает на моей стороне, я полагаю, что POST/GET понятие не было ранее обрабатываются должным образом, тогда как в этой версии.

Enjoy: р

+0

do not забыть, что вы можете утвердить свой собственный ответ –