使用访问令牌获取Google客户端

时间:2013-08-02 09:37:10

标签: php zend-framework google-spreadsheet-api google-api-client zend-gdata

我已经在我的数据库中存储了访问和刷新令牌。我想用谷歌客户端使用它。我不知道如何在下面的例子中使用它

$client = Zend_Gdata_ClientLogin::getHttpClient('you@there.com', 'password', Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);
$service = new Zend_Gdata_Spreadsheets($client);

// Get worksheet feed
$query = new Zend_Gdata_Spreadsheets_DocumentQuery();
$query->setSpreadsheetKey('your spreadsheet key');
$feed = $spreadsheetService->getWorksheetFeed($query);

我想用访问令牌替换电子邮件和密码。有人帮我怎么做。我在下面试过。但我只得到了例外

  

捕获异常:预期响应代码200,得到401

和 无状态令牌已过期

$client = Zend_Gdata_AuthSub::getHttpClient('ya29.XXXXXXX'); 

另一次尝试,

$client = new Zend_Gdata_HttpClient();
$session_token =Zend_Gdata_AuthSub::getAuthSubSessionToken('ya29.XXXXXXX',$client);
$client->setAuthSubToken($sessionToken);
  

捕获异常:令牌升级失败。原因是:

1 个答案:

答案 0 :(得分:1)

我认为你正在混淆。

ClientLogin和AuthSub是不同的身份验证API(均已弃用)。 ClientLogin令牌在两周或更早之后到期(请参阅:https://developers.google.com/gdata/faq#clientlogin_expire)。您可以通过调用setClientLoginToken的setter Zend_Gdata_HttpClient来使用令牌,只要它不会过期。

实施例

$client = Zend_Gdata_ClientLogin::getHttpClient('email@example.com', 'password', Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME);
$token = $client->getClientLoginToken();
//Save to DB / in session / whatever
$client = new Zend_Gdata_HttpClient();
$client->setClientLoginToken($token);
//Do stuff

您还可以使用Zend_Cache缓存整个HttpClient对象。

AuthSub或OAuth 2.0(更好,但没有ZF提供的类)可能更适合您的需求,因为令牌不会过期(AuthSub)或可以刷新(OAuth2)

文档

的AuthSub:

的OAuth2: