3

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

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

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

4

1 回答 1

1

我认为你把事情搞混了。

ClientLogin 和 AuthSub 是不同的身份验证 API(均已弃用)。ClientLogin 令牌在两周或更早后过期(请参阅:https ://developers.google.com/gdata/faq#clientlogin_expire )。只要令牌没有过期,您就可以通过调用setClientLoginToken.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)

文档

授权子:

OAuth2:

于 2013-08-06T10:34:20.477 回答