2016-06-24 1 views
-1

Je reçois ce code d'erreur (j'utilise une API publique de sorte qu'il travaille certainement de leur côté;)):PHP - l'authentification HMAC

clé HMAC d'authentification et de signature a été donnée, mais ils sont invalide.

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/ dit que vous devez "assurer la validité de la clé, le calcul secret, et la signature." – moxn

+1

J'ai mais les qualifications sont correctes ce n'est pas d'où le problème vient ... Juste au cas où quelqu'un d'autre a ce problème j'ai trouvé en ligne un autre code qui fonctionne ... Je l'afficherai ci-dessous;) –

Répondre

1

Au bout de 3 jours, j'ai trouvé la 'solution' ... voici un exemple de travail:

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>"; 

Il travaille sur mon côté, je suppose que le POST/GET idée n'a pas été auparavant gérer correctement alors qu'il est dans cette version.

Enjoy: p

+0

ne pas oublie que tu peux approuver ta propre réponse –