2014-02-11 4 views
0

Я получил код ниже на PHP, но получил ошибку с моего сервера, который не авторизован, поэтому я пытаюсь сделать что-то неправильно при вычислении $ signature для поля oauth_signature.Подсчитайте HMAC-SHA1 Подпись

Не устанавливайте никаких HTTP-заголовков.

 include_once "oauth-php/library/OAuthStore.php"; 
     include_once "oauth-php/library/OAuthRequester.php"; 

     $key = 'xx'; // this is your consumer key 
     $secret = 'xx'; // this is your secret key 
     $req_url = "http://www.sample.com"; 

     $options = array('consumer_key' => $key, 'consumer_secret' => $secret); 

    OAuthStore::instance("2Leg", $options); 

    $method = "POST"; 

$ PARAMS = массив ( 'oauth_consumer_key' => $ ключ, 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => время(), 'oauth_nonce' => время(), 'user_id' => '1234' );

$post_string = ''; 
foreach($params as $key => $value) { 
     $post_string .= $key.'='.($value).'&'; 
} 
$post_string = rtrim($post_string, '&'); 
$base_string = urlencodeRFC3986($post_string); 
$signature = base64_encode(hash_hmac('sha1', $base_string, $secret, true)); 

$params['oauth_signature'] = $signature; 
try { 
      $request = new OAuthRequester($req_url, $method, $params); 

      $result = $request->doRequest(); 
      var_dump($result); 
} 
catch(OAuthException2 $e) 
{ 
var_dump($e); 
} 

function urlencodeRFC3986($string) 
{  
return str_replace('%7E', '~', rawurlencode($string)); 
} 

ответ

1

Несколько вещей:

1) Не устанавливайте 'oauth_signature_method' как array('HMAC-SHA1'). Просто используйте 'HMAC-SHA1', иначе вы закончите с oauth_signature_method=Array в своей строке сообщения.

2) Не включайте oauth_signature в список параметров до после Вы рассчитали подпись. Смотрите этот вопрос для более подробной информации: https://stackoverflow.com/questions/9986533/what-does-oauth-signature-sign

Вы должны закончить с чем-то вроде:

$params = array(
       'oauth_consumer_key' => $key, 
       'oauth_signature_method' => 'HMAC-SHA1', 
       'oauth_timestamp' => time(), 
       'oauth_nonce' => time(), 
       'user_id' => '1234' 
       ); 

$post_string = ''; 
foreach($content as $key => $value) 
{ 
    $post_string .= $key.'='.($value).'&'; 
} 
$post_string = rtrim($post_string, '&'); 

$base_string = urlencodeRFC3986($post_string); 

$signature = base64_encode(hash_hmac('sha1', $base_string, $secret, true)); 

$params['oauth_signature'] = $signature; 
+0

обновил свой код, по-прежнему получает сообщение об ошибке аутентификации. – Lennie

Смежные вопросы