2

我正在创建必须添加,更新和删除事件到Google日历的代码我有用户的电子邮件地址添加。Google Calendar API PHP跳过客户端身份验证,并将所有内容转换为Web应用程序而不是命令行1

如何进行自动客户端认证(自行确认认证并获取验证码)?

转而使用Web应用程序而不是命令行?

require_once 'vendor/autoload.php'; 

    define('APPLICATION_NAME', 'Google Calendar API PHP Quickstart'); 
    define('CREDENTIALS_PATH', '~/.credentials/calendar-php-quickstart.json'); 
    define('CLIENT_SECRET_PATH', 'client_secret.json'); 
    define('SCOPES', implode(' ',array(Google_Service_Calendar::CALENDAR_READONLY))); 

    if (php_sapi_name() != 'cli') { 
     throw new Exception('This application must be run on the command line.'); 
    } 

    function getClient() { 
     $client = new Google_Client(); 
     $client->setApplicationName(APPLICATION_NAME); 
     $client->setScopes(SCOPES); 
     $client->setAuthConfigFile(CLIENT_SECRET_PATH); 
     $client->setAccessType('offline'); 

     $credentialsPath = expandHomeDirectory(CREDENTIALS_PATH); 

     if (file_exists($credentialsPath)) { 
     $accessToken = file_get_contents($credentialsPath); 
     } else { 
     // Request authorization from the user. 
     $authUrl = $client->createAuthUrl(); 
     printf("Open the following link in your browser:\n%s\n", $authUrl); 
     print 'Enter verification code: '; 
     $authCode = trim(fgets(STDIN)); 

     $accessToken = $client->authenticate($authCode); 

     if(!file_exists(dirname($credentialsPath))) { 
      mkdir(dirname($credentialsPath), 0700, true); 
     } 
     file_put_contents($credentialsPath, $accessToken); 
     printf("Credentials saved to %s\n", $credentialsPath); 
     } 
     $client->setAccessToken($accessToken); 
     if ($client->isAccessTokenExpired()) { 
     $client->refreshToken($client->getRefreshToken()); 
     file_put_contents($credentialsPath, $client->getAccessToken()); 
     } 
     return $client; 
    } 
    function expandHomeDirectory($path) { 
     $homeDirectory = getenv('HOME'); 
     if (empty($homeDirectory)) { 
     $homeDirectory = getenv("HOMEDRIVE") . getenv("HOMEPATH"); 
     } 
     return str_replace('~', realpath($homeDirectory), $path); 
    } 

    $client = getClient(); 
    $service = new Google_Service_Calendar($client); 

不能得到的教程来实现这个....

回答

0

你不能。为了访问私人用户数据(如用户日历),您的应用程序必须首先由所述用户进行身份验证。

可能的解决方案:让用户第一次验证它(将要求显示HTTP网页)。你会得到一个刷新令牌。保存刷新标记。然后,您的自动脚本可以使用刷新令牌获取新的访问令牌,并随时更新日历(无需Web显示)。

+0

谢谢你,现在我可以在命令行下工作如何使用它作为Web应用程序获取错误:此应用程序必须在命令行上运行。我的PHP版本大于5.4 – fernandus

+0

您必须通过网页第一次验证用户身份。没有办法解决这个问题。一旦拥有了刷新标记,其他的一切都可以自动运行命令行。 – DaImTo

+1

我需要完整的应用程序在网页下运行,我不打算在任何情况下使用命令行。我是新来的谷歌客户端API必须尝试获取刷新令牌并刷新令牌以从网页获取新的访问令牌。谢谢。 – fernandus

相关问题