|
|
Модератор форума: Yuri_G |
Сообщество uCoz » Вебмастеру » Общие вопросы от вебмастеров » Проблема с получением oauth_signature (INVALID_SIGNATURE) |
Проблема с получением oauth_signature (INVALID_SIGNATURE) |
Добрый день.
Не могу правильно зашифровать поле 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); Может что-то упустил? |
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 = ''; } Он рабочий. Я думаю, вы сможете приспособиться |
| |||
| |||