Возможный дубликат:
Получить контакты с помощью API контактов Yahoo
Я разрабатываю sysyem, чтобы получать контакты Yahoo от пользователей. Я выполнил все шаги из http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html, и у меня уже есть токен доступа и токены.
У меня возникла проблема с подписью с использованием алгоритма HMAC-SHA1, я выполнил шаги из http://developer.yahoo.com/oauth/guide/oauth-signing.html для генерации ключа подписи, но когда я запрашиваю контакты у данного пользователя Я получаю сообщение об ошибке:
<yahoo:error xmlns:yahoo='http://yahooapis.com/v1/base.rng' xml:lang='en-US'> <yahoo:description>Please provide valid credentials. OAuth oauth_problem="signature_invalid", realm="yahooapis.com"</yahoo:description> </yahoo:error>
Вот мой код, ответственный за создание ключа подписи:
$s = 'oauth_consumer_key='.rawurlencode($yahoo_consumer_key).'&'; $s .= 'oauth_nonce='.rawurlencode(uniqid()).'&'; $s .= 'oauth_signature_method='.rawurlencode('HMAC-SHA1').'&'; $s .= 'oauth_timestamp='.rawurlencode(time()).'&'; $s .= 'oauth_token='.rawurlencode($ouathToken).'&'; $s .= 'oauth_version='.rawurlencode('1.0').'&'; $s .= 'realm='.rawurlencode('yahooapis.com'); $baseString ='GET&'.rawurlencode('http://social.yahooapis.com/v1/user/'.$guid.'/contacts').'&'.rawurlencode($s); $signingKey = rawurlencode($yahoo_consumer_secret).'&'.rawurlencode($ouathTokenSecret); $signature = urlencode(base64_encode(hash_hmac('sha1', $baseString, $signingKey, true))); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_HTTPGET => true, CURLOPT_POST => false, CURLOPT_URL => 'http://social.yahooapis.com/v1/user/'.$guid.'/contacts'. '?realm=yahooapis.com'. '&oauth_consumer_key='.$yahoo_consumer_key. '&oauth_nonce='.uniqid(). '&oauth_signature_method=HMAC-SHA1'. '&oauth_timestamp='.time(). '&oauth_token='.$ouathToken. '&oauth_version=1.0'. '&oauth_signature='.$signature )); $result = curl_exec($ch);
Кто-нибудь может помочь мне сказать, где ошибка? Разве я не сгенерировал код подписи правильно?
Спасибо.