По независящим от меня причинам я использую PHP4 для написания твиттер-клиента.Запросы не работают должным образом - мне трудно понять, что не так.Есть идеи?
Я взял код и написал его очень простым сценарием, чтобы проиллюстрировать, что происходит.Я скрыл ключи OAuth в целях безопасности.
<code><?php
$requestTokenURL = 'https://api.twitter.com/oauth/request_token';
$consumerKey = 'fLxA6J1111111111PnvVOg';
$consumerSecret = 'H5QxDHAOHn1111111111111Ozet1HRTtVAV1FM3oYk';
$callbackURL = 'http://www.example.com';
$signature = 'POST&' . urlencode($requestTokenURL) . '&';
$auth_params = array(
'oauth_callback' => $callbackURL,
'oauth_consumer_key' => $consumerKey,
'oauth_nonce' => md5(time()),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
ksort($auth_params);
foreach($auth_params as $k=>$v) {
if ($k == 'oauth_callback') {
$v = urlencode($v);
}
$signature .= urlencode($k) . '%3D' . urlencode($v) . '%26';
}
$signature = substr($signature, 0, strlen($signature) - 3);
$signing_key = $consumerSecret . '&';
$oauth_signature = hmac_sha1($signing_key, $signature);
$auth_params['oauth_signature'] = $oauth_signature;
$auth_string = 'OAuth ';
foreach($auth_params as $k=>$v) {
$auth_string .= $k . '="' . urlencode($v);
$auth_string .= ($k == 'oauth_signature') ? '&' : '';
$auth_string .= '", ';
}
$auth_string = substr($auth_string, 0, strlen($auth_string) - 2);
echo 'Authorization header: <pre>';
echo $auth_string;
echo '
';эхо«;echo 'Подпись OAuth:
';
var_dump($oauth_signature);
echo '
';эхо«;//выход;$ curl = curl_init ();curl_setopt ($ curl, CURLOPT_URL, $ requestTokenURL);curl_setopt ($ curl, CURLOPT_POST, GET);curl_setopt ($ curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt ($ curl, CURLOPT_RETURNTRANSFER, true);curl_setopt ($ curl, CURLOPT_HTTPHEADER, массив ('Авторизация:'. $ auth_string));$ response = curl_exec ($ curl);curl_close ($ завиток);var_dump ($ ответ);/ * функция из PHP.net - нет встроенной функции PHP4 * / function hmac_sha1 ($ key, $ data) {$ blocksize = 64;$ hashfunc = 'sha1';if (strlen ($ key)> $ blocksize) {$ key = pack ('H *', $ hashfunc ($ key));} $ key = str_pad ($ key, $ blocksize, chr (0x00));$ ipad = str_repeat (chr (0x36), $ blocksize);$ opad = str_repeat (chr (0x5c), $ blocksize);$ hash = pack ('H *', $ hashfunc (($ key ^ $ opad) .pack ('H *', $ hashfunc (($ key ^ $ ipad). $ data))));возвращаем base64_encode ($ hash);}?>
дело в том, что я пытался запустить этот скрипт со значениями http://dev.twitter.com/pages/auth#signing-requests, и подпись и строка авторизации были точно такими же - но когда я пытаюсь выполнить с CURLс моими собственными значениями (используя точно такой же код) он просто дает мне довольно неописанное «Не удалось проверить подпись и токен oauth»