Google-API-PHP客户端出现问题,运行快速启动脚本时出错

时间:2015-12-20 18:18:03

标签: google-drive-api google-api-php-client

我在这里遇到了一个快速启动php脚本的问题:https://developers.google.com/drive/v2/web/quickstart/php

当我第一次运行脚本时,它会完美执行,访问令牌存储在一个名为:drive-php-quickstart.json的文件中

当我第二次运行脚本时,它会给我错误:

错误开始:

注意:第485行的\ google-api-php-client \ src \ Google \ Client.php中的未定义索引:expires_in

致命错误:未捕获的异常' LogicException'带有消息'刷新令牌必须传入或设置为setAccessToken的一部分'在

错误结束:

我的假设是文件中保存的访问令牌格式不正确。

当前格式:

ya29.CODE-oN_Bearer36001 / _ANOTHER-CODE-ANOTHER_ANOTHER_CODE

如您所见,它不包含变量" expires_in"

我出错的任何建议?我按原样运行脚本,没有任何修改。

1 个答案:

答案 0 :(得分:12)

我已经调试了它......编写它的人在将auth结果写入token.json文件之前没有调用json_encode时犯了一个错误。

您可以通过在第45行添加json_encode来解决此问题。

因此...

file_put_contents($credentialsPath, $accessToken);

......应该是:

file_put_contents($credentialsPath, json_encode($accessToken));

我已经提交了反馈意见,希望它能得到解决。

编辑:同一方法中的令牌刷新调用会出现同样的问题

edit2:这是我在Github讨论中的相关评论以及Google的答案:https://github.com/google/google-api-php-client/issues/263#issuecomment-186557360

我提出了以下几点的建议:

if ($client->isAccessTokenExpired()) {
    $refreshToken = $client->getRefreshToken();
    $client->refreshToken($refreshToken);
    $newAccessToken = $client->getAccessToken();
    $newAccessToken['refresh_token'] = $refreshToken;
    file_put_contents($credentialsPath, json_encode($newAccessToken));
}

而不是:

// Refresh the token if it's expired.
if ($client->isAccessTokenExpired()) {
    $client->refreshToken($client->getRefreshToken());
    file_put_contents($credentialsPath, $client->getAccessToken());
}