Php 推特Oauth库。。。。再来一次
首先,我知道有很多oauth库,我曾想过使用它们,但决定不使用,所以我写自己的只是为了好玩。我在签署请求时遇到问题。。。要帮忙吗Php 推特Oauth库。。。。再来一次,php,api,twitter,oauth,Php,Api,Twitter,Oauth,首先,我知道有很多oauth库,我曾想过使用它们,但决定不使用,所以我写自己的只是为了好玩。我在签署请求时遇到问题。。。要帮忙吗 function signRequest($secret, $baseUrl){ return base64_encode(hash_hmac('sha1', $baseUrl, $secret, TRUE)); } function getRequestToken(){ $urlParams = array( "oauth_cons
function signRequest($secret, $baseUrl){
return base64_encode(hash_hmac('sha1', $baseUrl, $secret, TRUE));
}
function getRequestToken(){
$urlParams = array(
"oauth_consumer_key"=>$this->consumer_key,
"oauth_signature_method"=>$this->oauth_signature_method,
"oauth_timestamp"=>time(),
"oauth_nonce"=>time(),
"oauth_version"=>$this->oauth_version
);
uksort($urlParams, 'strcmp');
foreach($urlParams as $k=>$v){
$joinedParams[] = $k."=".$v;
}
$joinedParams = implode("&", $joinedParams);
$baseString = "POST&".rawurlencode($this->request_token_url)."&".rawurlencode($joinedParams);
$secret = $this->consumer_secret."&";
$urlParams['oauth_signature'] = $this->signRequest($secret, $baseUrl);
uksort($urlParams, 'strcmp');
foreach($urlParams as $k => $v){
$urlPairs[] = $k."=".$v;
}
$concatenatedUrlParams = implode('&', $urlPairs);
$url = $this->request_token_url."?".$concatenatedUrlParams;
echo $url;
}
我对签署请求这件事还不熟悉。不过,我可以通过以下链接连接到twitter api。我的答案基本上是以下答案的改写科迪
您似乎试图像令牌一样强制使用oauth参数 您需要构建一个“授权”头,并将其发送到twitter以获取请求令牌。我已经破坏了代码的类功能,但是作为一个php文件,它可以正常工作 检查差异,并尝试将它们嵌入到您自己的类中 代码如下:
<?php
getRequestToken ();
function signRequest($secret, $baseString) {
return base64_encode ( hash_hmac ( 'sha1', $baseString, $secret, TRUE ) );
}
function getRequestToken() {
$urlParams = array (
"oauth_consumer_key" => "5P7F5qtIUujg3KtLxxxxxx", //$this->consumer_key,
"oauth_signature_method" => "HMAC-SHA1", //$this->oauth_signature_method,
"oauth_timestamp" => time(),
"oauth_nonce" => md5 ( uniqid ( rand(), true ) ), // don't use time for nonce :)
"oauth_version" => "1.0" //$this->oauth_version
);
ksort ( $urlParams ); // don't need uksort, ksort is enough
foreach ( $urlParams as $k => $v ) {
$joinedParams [] = $k . "=" . $v;
}
$joinedParams = implode ( "&", $joinedParams );
$baseString = "GET&" . rawurlencode ( "https://api.twitter.com/oauth/request_token" ) . "&" . rawurlencode ( $joinedParams );
$secret = rawurlencode ( "3q017y6ir8Rxxxxxxx" ) . "&"; //$this->consumer_secret."&";
// We need to use the $baseString, not an url
$urlParams ['oauth_signature'] = rawurlencode ( signRequest ( $secret, $baseString ) );
// Another ksort is not needed, it is ok for signature to be at the end, however:
ksort($urlParams);
// We need to build an array of headers for CURL
$urlParts = parse_url ( "https://api.twitter.com/oauth/request_token" );
$header = array ('Expect:' );
$oauthHeader = 'Authorization: OAuth realm="' . $urlParts ['path'] . '", ';
foreach ( $urlParams as $name => $value ) {
$oauthHeader .= "{$name}=\"{$value}\", ";
}
$header [] = substr ( $oauthHeader, 0, - 2 );
// Ask Twitter for a request token
$ch = curl_init ( "https://api.twitter.com/oauth/request_token" );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
$content = curl_exec ( $ch );
curl_close ( $ch );
// Create the url from the curl answer
parse_str($content, $output);
$url = "https://api.twitter.com/oauth/authorize?oauth_token=" . $output["oauth_token"];
echo $url ;
}
我想你忘了告诉我们到底出了什么问题。我想我在请求上签名不正确……你怎么会这么想?您是否收到特定的错误消息?只是oauth失败的响应。请记住,所有相同的信息(密钥、机密、url参数等)都适用于未经更改的@Justin版本,您的工作似乎基于原始问题,而不是公认的答案。特别是,您至少缺少了一个参数。哇,在所有这些搜索之后,我终于资助了一个漂亮的、简洁的响应。试图从整个类oAuth libs中分离出一些基本的函数是非常烦人的。谢谢你快速简单的回复。我试图写下整个过程,但这个评论框很小。另外,我还记得Twitter上有一个页面,非常详细、有序地解释了OAuth的所有过程:是的,我一直在读那个页面,但我仍然有这些问题。再次感谢。