【问题标题】:Zend OAuth with twitter single access tokensZend OAuth 与 twitter 单一访问令牌
【发布时间】:2011-03-26 06:23:36
【问题描述】:

我正在开发一个应用程序,它要求用户使用 twitter 和 OAuth 登录。多亏了 Zend_OAuth,一切都运行良好。问题是 Web 应用程序也会对 twitter API 进行一些调用,但这些调用将在内部处理,无需进行身份验证。 Twitter 开发人员为此提供了“access_token”和“access_token_secret”密钥(在此提及http://dev.twitter.com/pages/oauth_single_token

问题是我无法让 Zend_OAuth 与现有的访问令牌一起使用。有没有人可以通过几行代码提供帮助,我如何使用现有密钥进行 API 调用而不被重定向到 Twitter 的授权页面?我知道这是可以做到的。

附言。如果可能,我不想使用 dev.twitter.com 中提到的外部库——这正是 Zend Framework 提供的

谢谢!

【问题讨论】:

    标签: php api zend-framework twitter oauth


    【解决方案1】:

    使用 ZF 1.10.8 版,在 Twitter 上发布所需的最少代码是:

    $token = new Zend_Oauth_Token_Access;
    $token->setParams(array(
    'oauth_token' => 'REPLACE_WITH_TOKEN',
    'oauth_token_secret' => 'REPLACE_WITH_TOKEN_SECRET'
    ));
    
    $twitter = new Zend_Service_Twitter(array(
    'consumerKey' => 'REPLACE_WITH_CONSUMER_KEY', 
    'consumerSecret' => 'REPLACE_WITH_CONSUMER_SECRET',
    'accessToken' => $token
    ));
    
    $response = $twitter->status->update('REPLACE WITH MESSAGE');
    

    http://dev.twitter.com注册您的应用程序后,可以访问所有令牌和秘密

    【讨论】:

    • 不错的解决方案,更简洁
    【解决方案2】:

    在从 db 存储的令牌和令牌秘密组件重新生成 access_token obj 之后(正如 Justin 所示),您也可以根据您的 Twitter 需求绕过 Zend_Oauth_Consumer 和 Zend_Service_Twitter 并使用 Zend_Oauth_Token_Access 提供的 Zend_Http_Client。这适用于简单的状态发布 - 如下所示:

    $token = new Zend_Oauth_Token_Access();
    $token->setToken('singletoken');
    $token->setTokenSecret('singlesecret');
    
    $client = $token->getHttpClient(array('requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 
    'version' => '1.0', 
    'signatureMethod' => 'HMAC-SHA1', 
    'callbackUrl' => 'http://example.org/dummyurl', 
    'requestTokenUrl' => 'http://twitter.com/oauth/request_token', 
    'accessTokenUrl' => 'http://twitter.com/oauth/access_token', 
    'userAuthorizationUrl' => 'http://twitter.com/oauth/authorize', 
    'consumerKey' => 'yourconsumerkey',
    'ConsumerSecret' => 'yourconsumersecret',
    ));
    
    $client->setUri('http://twitter.com/statuses/update.json');
    $client->setMethod(Zend_Http_Client::POST);
    $client->setParameterPost('status', $_POST["tweet_text"]);
    $response = $client->request();
    
    $data = Zend_Json::decode( $response->getBody(), Zend_Json::TYPE_OBJECT);
    
    if($data->text) { /* success */ }
    

    【讨论】:

    • 谢谢大家,你们的回答真的很有帮助!
    【解决方案3】:
    $token = new Zend_Oauth_Token_Access();
    $token->setToken('singletoken');
    $token->setTokenSecret('singlesecret');
    $consumer = new Zend_Oauth_Consumer(
    array('requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 
    'version' => '1.0', 
    'signatureMethod' => 'HMAC-SHA1', 
    'callbackUrl' => 'http://example.org/dummyurl', 
    'requestTokenUrl' => 'http://twitter.com/oauth/request_token', 
    'accessTokenUrl' => 'http://twitter.com/oauth/access_token', 
    'userAuthorizationUrl' => 'http://twitter.com/oauth/authorize', 
    'consumerKey' => 'yourconsumerkey',
    'ConsumerSecret' => 'yourconsumersecret',
    ));
    
    $twtr = new Zend_Service_Twitter(array('accessToken'=>$token), $consumer);
    

    应该这样做。

    【讨论】:

      【解决方案4】:

      如果代码示例不起作用,请尝试将“ConsumerSecret”的大小写更改为“consumerSecret”。我花了几个小时才抓住这个。希望它能节省您的时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-08
        • 1970-01-01
        • 2015-05-28
        • 2019-09-16
        • 1970-01-01
        • 2015-04-23
        • 1970-01-01
        相关资源
        最近更新 更多