php - 使用访问 token 获取 Google 客户端

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

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

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

我想用访问 token 替换电子邮件和密码。有人帮我怎么做。我在下面试过。但我只有异常(exception)

Caught exception: Expected response code 200, got 401

和 无状态 token 已过期

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

再试一次,

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

Caught exception: Token upgrade failed. Reason:

最佳答案

我觉得你把事情搞混了。

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

示例:

$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 提供的类)可能更适合您的需求,因为 token 不会过期 (AuthSub) 或可以刷新 (OAuth2)

文档

授权订阅:

OAuth2:

关于php - 使用访问 token 获取 Google 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18013564/

相关文章:

php - 使用 Zend/PHP 删除 YouTube 视频

zend-framework - 我不懂模块

google-api - Google电子表格中查询中的动态工作表名称

google-sheets - 谷歌电子表格 API v4 - 寻找值(value)

php - 如何使用 google api 创建电子表格并使用 PHP 设置适当的权限?

php - Drupal 模板/主题资源或建议?

php - 如何在 PHP 中进行 AES256 解密?

php - 如何防止搜索表单中的XSS?

php - DateTime 未插入 MySql 数据库

php - 直接加入zend框架