簡體   English   中英

Zend_Service_Twitter - 准備好API v1.1

[英]Zend_Service_Twitter - Make API v1.1 ready

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());

我將Zend/Service/Twitter.php的verifyCredentials代碼更改為:

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());
}

現在我在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"

正如您所看到的, oauth_consumer_key (以及realm )也是空的。 這可能是錯誤嗎? 我怎么能解決這個錯誤(因為更新的API版本更嚴格?)? 以某種方式設置oauth_consumer_key嗎? 如果是的話,我怎么能管理呢?

編輯:我還發現了一個關於Zend框架問題跟蹤器的錯誤報告: http//framework.zend.com/issues/browse/ZF-12409 (也許做一個upvote?)

使用ZF 1.12.3,解決方法是在oauthOptions選項中傳遞consumerKey和consumerSecret,而不是直接在選項中傳遞。

        $options = array(
            'username' => /*...*/,
            'accessToken' => /*...*/,
            'oauthOptions' => array(
                'consumerKey' => /*...*/,
                'consumerSecret' => /*...*/,
            )
        );

在等待在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)
));

今天我遇到了同樣的問題 - Zend Framework與API 1一起使用。

我創建了新類

class Zend_Service_Twitter11 extends Zend_Service_Twitter

並覆蓋我需要的功能。

statusUpdate
statusReplies

等等

    $this->_session = new Zend_Session_Namespace('auth_twitter');
    $config = Zend_Registry::get('config')->twitter->toArray();
    $access_tokenSession = unserialize($this->_session->access_token);



    $accessToken = new Zend_Oauth_Token_Access();
    $accessToken->setToken($access_tokenSession->oauth_token);
    $accessToken->setTokenSecret($access_tokenSession->oauth_token_secret);

    $temp = array();
    $temp['oauthOptions']['consumerKey'] = $config['consumerKey'];
    $temp['oauthOptions']['consumerSecret'] = $config['consumerSecret'];
    $temp['accessToken'] = $accessToken;
    $temp['username'] = $access_tokenSession->screen_name;


    $this->_twitter = new Zend_Service_Twitter($temp, null);

    $this->_twitter->account->accountVerifyCredentials()->toValue()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM