【发布时间】:2017-01-11 21:27:36
【问题描述】:
我目前面临一个非常奇怪的问题,实际上我一直在遵循 Google API 文档中的相同指南 (https://developers.google.com/google-apps/calendar/quickstart/php)。我尝试了两次,第一次它就像一个魅力,但在访问令牌过期后,Google API Doc 直接提供的脚本无法刷新它。
TL;DR
这是错误信息:
sam@ssh:~$ php www/path/to/app/public/quickstart.php
Fatal error: Uncaught exception 'LogicException' with message 'refresh token must be passed in or set as part of setAccessToken' in /home/pueblo/www/path/to/app/vendor/google/apiclient/src/Google/Client.php:258
Stack trace:
#0 /home/pueblo/www/path/to/app/public/quickstart.php(55): Google_Client->fetchAccessTokenWithRefreshToken(NULL)
#1 /home/pueblo/www/path/to/app/public/quickstart.php(76): getClient()
#2 {main}
thrown in /home/pueblo/www/path/to/app/vendor/google/apiclient/src/Google/Client.php on line 258
这是我修改过的google php脚本的一部分:
require_once __DIR__ . '/../vendor/autoload.php';
// I don't want the creds to be in my home folder, I prefer them in the app's root
define('APPLICATION_NAME', 'LRS API Calendar');
define('CREDENTIALS_PATH', __DIR__ . '/../.credentials/calendar-php-quickstart.json');
define('CLIENT_SECRET_PATH', __DIR__ . '/../client_secret.json');
我还修改了expandHomeDirectory,这样我就可以在不修改太多代码的情况下“禁用”它:
function expandHomeDirectory($path) {
$homeDirectory = getenv('HOME');
if (empty($homeDirectory)) {
$homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH');
}
return $path;
// return str_replace('~', realpath($homeDirectory), $path);
}
所以为了检查我是否错了或者谷歌是否错了,我做了一个实验:昨天晚上我从 ssh 启动了快速启动脚本来检查它是否工作,确实是这样,所以我决定今天早上检查它是否仍然像我睡前一样工作,但我认为谷歌的quickstart.php 有问题。
我希望有人可以帮助我,我已经检查了有关该主题的所有其他帖子,但它们都已过时。
【问题讨论】:
-
我觉得这个SO question可以帮到你。
-
不,确实它看起来像是一个有效的答案,但是这个用户报告的错误已经在我使用的代码中得到修复,因为他向谷歌提交了修复它的票。但是感谢您尝试帮助我:)
-
截至 2017 年 11 月 20 日,作为 quickstart.php 发布的 Google 示例 PHP 代码仍然出现您询问的错误...
标签: php google-api google-calendar-api access-token google-api-php-client