Nicht überprüft werden konnte oauth-Signatur und token
Gründen, die außerhalb meiner Kontrolle ich bin mit PHP4 zu schreiben, ein twitter-client. Anfragen funktionieren nicht richtig - ich bin eine harte Zeit zu sehen, was falsch ist. Irgendwelche Ideen?
Ich packte Sie den code und knallte es in einem sehr einfachen Skript hier zur Veranschaulichung im wesentlichen, was Los ist. Ich habe versteckte OAuth-Schlüssel für security-Zwecke.
<?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 '</pre>';
echo '<br /><br />';
echo 'OAuth Signature: <pre>';
var_dump($oauth_signature);
echo '</pre>';
echo '<br /><br />';
//exit;
$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, array('Authorization: ' . $auth_string)
);
$response = curl_exec($curl);
curl_close($curl);
var_dump($response);
/* function from PHP.net - no PHP4 built-in function */
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 ) ) ) );
return base64_encode($hash);
}
?>
die Sache ist die, ich habe versucht mit diesem script mit den Werten aus http://dev.twitter.com/pages/auth#signing-requests und die Signatur und der Autorisierung string waren genau die gleichen - aber wenn ich versuche, ausgeführt mit CURL mit meiner eigenen Werte (über die exacty gleichen code) es gibt nur mich, die eher non-descript "Fehler beim validieren oauth-Signatur und-token"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann es nicht glauben - gerade gefunden ein oder zwei Sekunden nach der Veröffentlichung dieser Frage. Es gab in der Tat zwei Dinge, die falsch mit ihm:
1) Die Zeit auf meinem dev server war nicht richtig eingestellt. Nach dem einstellen dieser korrekt aber es funktioniert immer noch nicht.
2) nach festlegen curl_setopt($curl, CURLOPT_POST, true) alles magisch gearbeitet. Hoorah!