Zend_Service_Twitter - 准备好API v1.1

Por*_*oru 14 php twitter zend-framework twitter-oauth

Zend_Service_Twitter组件仍然适用于Twitters API v1.0,将于2013年3月5日弃用.因此,我希望使用Twitter API交互v1.1准备好我的新网站.一切工作正常V1.0,但如果我从更改URL /1//1.1/失败与HTTP标头码400和JSON错误信息:Bad Authentication data(代码:215)

为了获得请求和访问令牌保持不变并且已经没有任何更改,但是如果我想验证这样的凭据,我得到上面描述的错误:

// Take a look for the code here: http://framework.zend.com/manual/1.12/en/zend.oauth.introduction.html
$accessToken = $twitterAuth->getAccessToken($_GET, unserialize($_SESSION['TWITTER_REQUEST_TOKEN']));


// I have a valid access token and now the problematic part
$twitter = new Zend_Service_Twitter(array(
    'username' => $accessToken->getParam('screen_name'),
    'accessToken' => $accessToken
));
print_r($twitter->account->verifyCredentials());
Run Code Online (Sandbox Code Playgroud)

我将verifyCredentials的代码Zend/Service/Twitter.php从那里更改为:

public function accountVerifyCredentials()
{
    $this->_init();
    $response = $this->_get('/1/account/verify_credentials.xml');
    return new Zend_Rest_Client_Result($response->getBody());
}

// to

public function accountVerifyCredentials()
{
    $this->_init();
    $response = $this->_get('/1.1/account/verify_credentials.json');
    return Zend_Json::decode($response->getBody());
}
Run Code Online (Sandbox Code Playgroud)

现在我在return Zend_Json[...]这行之前添加了:

print_r($this->_localHttpClient->getLastRequest());

// And I get this output of it:

GET /1.1/account/verify_credentials.json HTTP/1.1
Host: api.twitter.com
Connection: close
Accept-encoding: gzip, deflate
User-Agent: Zend_Http_Client
Accept-Charset: ISO-8859-1,utf-8
Authorization: OAuth realm="",oauth_consumer_key="",oauth_nonce="91b6160db351060cdf4c774c78e2d0f2",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1349107209",oauth_version="1.0",oauth_token="hereismytoken",oauth_signature="hereisavalidsignature"
Run Code Online (Sandbox Code Playgroud)

你可以看到oauth_consumer_key(realm也是)是空的.这可能是错误吗?我怎么能解决这个错误(因为更新的API版本更严格?)?设置不知何故可以oauth_consumer_key吗?如果是的话,我怎么能管理呢?

编辑:我还发现了一个关于Zend框架问题跟踪器的错误报告:http: //framework.zend.com/issues/browse/ZF-12409(也许做一个upvote?)

小智 9

使用ZF 1.12.3,解决方法是在oauthOptions选项中传递consumerKey和consumerSecret,而不是直接在选项中传递.

        $options = array(
            'username' => /*...*/,
            'accessToken' => /*...*/,
            'oauthOptions' => array(
                'consumerKey' => /*...*/,
                'consumerSecret' => /*...*/,
            )
        );
Run Code Online (Sandbox Code Playgroud)


Jua*_*ras 1

当您等待在 Zend_Twitter_Service 组件中修复此问题时,您可以执行以下解决方法:

您需要将customerKeycustomerSecret发送到 Zend_Service_Twitter

$twitter = new Zend_Service_Twitter(array(
                'consumerKey' => $this->consumer_key,
                'consumerSecret' => $this->consumer_secret,
                'username' => $user->screenName,
                'accessToken' => unserialize($user->token)
));
Run Code Online (Sandbox Code Playgroud)