我在这里面临一个快速启动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"
我出错的任何建议?我按原样运行脚本,没有任何修改.
我调试了它......编写它的人json_encode
在将auth结果写入token.json文件之前没有调用时犯了一个错误.
您可以通过json_encode
在第45行添加来修复它.
所以...
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()); }