我在Twitter的oauth身份验证和使用回调网址时遇到问题。
我在php中编码并使用twitter wiki引用的示例代码http://github.com/abraham/twitteroauth
我得到了那个代码,并尝试了一个简单的测试,它运行得很好。但是我想以编程方式指定回调网址,示例不支持该功能。
所以我很快修改了getRequestToken()方法来接受一个参数,现在它看起来像这样:
function getRequestToken($params = array()) {
$r = $this->oAuthRequest($this->requestTokenURL(), $params);
$token = $this->oAuthParseResponse($r);
$this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
return $token;
}
我的电话看起来像这样
$tok = $to->getRequestToken(array('oauth_callback' => 'http://127.0.0.1/twitter_prompt/index.php'));
这是我所做的唯一更改,重定向就像魅力一样,但是当我尝试使用新授予的访问权限尝试拨打电话时,我收到错误。我收到“无法验证你”错误。此外,应用程序实际上从未实际添加到用户授权的连接中。
现在我阅读了规范,我认为我所要做的就是在获取请求令牌时指定参数。在oauth和twitter上多一点经验丰富的人可能会帮我一个忙吗?谢谢
答案 0 :(得分:7)
我认为这是由Twitter现在修复的,或者您可能错过了在您的应用程序设置中提供默认回调网址,这是动态回调网址上面其他人提到的工作所必需的。
无论如何,我通过在检索请求令牌时传递oath_callback参数来实现此功能。我正在使用twitter-async PHP库并且必须进行一些小调整以使库传递回调URL。
如果您使用的是twitter-async,则更改如下:
修改了getRequestToken和getAuthenticateURL函数以将回调url作为参数
public function getRequestToken($callback_url = null)
{
$params = empty($callback_url) ? null : array('oauth_callback'=>$callback_url);
$resp = $this->httpRequest('GET', $this->requestTokenUrl, $params);
return new EpiOAuthResponse($resp);
}
public function getAuthenticateUrl($callback_url = null)
{
$token = $this->getRequestToken($callback_url);
return $this->authenticateUrl . '?oauth_token=' . $token->oauth_token;
}
并从PHP代码传递回调网址。
$twitterObj->getAuthenticateUrl('http://localhost/twitter/confirm.php');
答案 1 :(得分:1)
@Ian,twitter现在允许127.0.0.1并且最近做了一些其他更改。
@jtymann,在这里查看我的答案,看看是否有帮助
Twitter oauth_callback parameter being ignored!
GL
广告歌曲
答案 2 :(得分:1)
即使我得到401错误..但它解决了.. 在将您的应用程序注册到Twitter时,您需要提供回调URL ... 比如http://localhost:8080。
我用java做过这个... 所以我的代码是:String CallbackURL =“http:// localhost:8080 / tweetproj / index.jsp”; provider.retrieveRequestToken(消费者,CallbackURL);
其中tweetproj是我的项目名称 和index.jsp只是一个jsp页面......
希望这可以帮助你...
答案 3 :(得分:0)
用户在twitter.com上授权应用程序并返回到您的回调URL后,您必须交换请求令牌以获取访问令牌。
答案 4 :(得分:-2)
Twitter不尊重oauth_callback参数,只会使用已注册的应用程序设置中指定的参数。
它也不允许在该回调中使用127.0.0.1或localhost名称,因此我在DNS中设置了http://dev.twipler.com设置为127.0.0.1,以便您可以放心使用;
http://dev.twipler.com/twitter_prompt/index.php