Страница 1 из 11
Модератор форума: Yuri_G 
Сообщество uCoz » Вебмастеру » Общие вопросы от вебмастеров » Проблема с получением oauth_signature (INVALID_SIGNATURE)
Проблема с получением oauth_signature (INVALID_SIGNATURE)
hzkov3000
Сообщений: 2
Репутация: 0

Сообщение # 1 | 11:36:31
Добрый день.
Не могу правильно зашифровать поле oauth_signature. Для POST зарпhttp://uapi.ucoz.com/accounts/OAuthGetRequestToken

Код
<?
   // Функия из uAPImodule
   function getSignature($method, $url, $params) {
      ksort($params);
      $baseString = strtoupper($method) . '&' . urlencode($url) . '&' . urlencode(strtr(http_build_query($params), array ('+' => '%20')));
      return urlencode(base64_encode(hash_hmac('sha1', $baseString, '{salt}', true))); // {salt} - поскольку я пока не знаю token, использовал только consumer_secret&
   }

   $params = [
      'oauth_consumer_key'   => 'key', // ключ приложения
      'oauth_signature_method'=> 'HMAC-SHA1',
      'oauth_token'         => '',
      'oauth_timestamp'      => time(),
      'oauth_nonce'         => md5(microtime() . mt_rand()),
      'oauth_callback'      => 'http://192.168.224.153:11772/?service=ucoz',
   ];

   $url = 'http://uapi.ucoz.com/accounts/OAuthGetRequestToken';
   $sign = array_merge( array('oauth_signature' => getSignature('POST', $url, $params)), $params);
   $queryString = http_build_query($sign);
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
   curl_setopt($curl, CURLOPT_POST, true);
   $forcurlpost = array_merge($params, $sign);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $forcurlpost);
   $result = curl_exec($curl);
   curl_close($curl);
   print_r($result);

Может что-то упустил?
Dmitry_DM
Сообщений: 552
Репутация: 109

Сообщение # 2 | 13:06:24
hzkov3000, Добрый день!

На http://api.ucoz.net/ru/join/reg

используется такое:
Код
$request_token_url = $testorno.'accounts/OAuthGetRequestToken';
$oauth_nonce = md5(microtime().mt_rand());
$timestamp = time();
$sig_method = "HMAC-SHA1";
$oauth_version = "1.0";
$callback_url = $callback;

$request_token_url = trim($request_token_url);
$oauth_nonce = trim($oauth_nonce);
$timestamp = trim($timestamp);
$sig_method = trim($sig_method);
  $oauth_version = trim($oauth_version);
  $callback_url = trim($callback_url);

$basestring = "oauth_callback=".urlencode($callback_url)."&oauth_consumer_key=".$consumerkey."&oauth_nonce=".$oauth_nonce."&oauth_signature_method=".$sig_method."&oauth_timestamp=".$timestamp."&oauth_version=".$oauth_version;

// basestring должна содержать все переменные, которые будут передаваться. Эта переменная используется для генерации подписи

$basestring = "POST&".urlencode($request_token_url)."&".urlencode($basestring);
$hash_key = $comsumersecret."&".$oauth_token_secret;

// во время авторизации в $hash_key используется только $consumer_secret

$oauth_signature = base64_encode(hash_hmac('sha1', $basestring, $hash_key, true));
$oauth_signature = trim($oauth_signature);
$oauth_signature = urlencode($oauth_signature);
$url = $request_token_url."?oauth_nonce=".$oauth_nonce."&oauth_timestamp=".$timestamp."&oauth_consumer_key=".$consumerkey."&oauth_signature_method=".$sig_method."&oauth_version=".$oauth_version."&oauth_signature=".$oauth_signature."&oauth_callback=".$callback_url;

if( $curl = curl_init() ) {
  //curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, "");
    $out = curl_exec($curl);
    $obj = json_decode($out);
    curl_close($curl);
  }
  if (isset($obj->{'error'}->{'msg'}))
{
  $errormessage = $obj->{'error'}->{'msg'};
} else {
  $errormessage = '';
}
  


Он рабочий. Я думаю, вы сможете приспособиться
hzkov3000
Сообщений: 2
Репутация: 0

Сообщение # 3 | 15:47:54
Dmitry_DM, спасибо
Сообщество uCoz » Вебмастеру » Общие вопросы от вебмастеров » Проблема с получением oauth_signature (INVALID_SIGNATURE)
Страница 1 из 11
Поиск: