2016-12-09 3 views
0

Googleカレンダーが正しく動作しない、エラーが発生する "致命的なエラー:E:\ Extrawork \ Wamp \ www \ alpha \ application \ modules \ myaccount \ controllers \ google-api \ src \ Google \ Client.php "

誰かが私に助けてくれてありがとう?Googleカレンダーが動作しない

public function google_api(){ 
     error_reporting(E_ALL); 
     require_once('google-api/vendor/autoload.php'); 


     define('APPLICATION_NAME', 'Google Calendar API PHP Quickstart'); 
     define('CREDENTIALS_PATH', '~/credential/credential.json'); 
     define('CLIENT_SECRET_PATH', __DIR__ . '\google-api\client_secret.json'); 

     // If modifying these scopes, delete your previously saved credentials 
     // at ~/.credentials/calendar-php-quickstart.json 
     define('SCOPES', implode(' ', array(
      Google_Service_Calendar::CALENDAR_READONLY) 
     )); 

     // Get the API client and construct the service object. 
     $client = $this->getClient(); 
     $service = new Google_Service_Calendar($client); 

     // Print the next 10 events on the user's calendar. 
     $calendarId = 'primary'; 
     $optParams = array(
      'maxResults' => 10, 
      'orderBy' => 'startTime', 
      'singleEvents' => TRUE, 
      'timeMin' => date('c'), 
     ); 
     $results = $service->events->listEvents($calendarId, $optParams); 

     if (count($results->getItems()) == 0) { 
      print "No upcoming events found.\n"; 
     } else { 
      print "Upcoming events:\n"; 
      foreach ($results->getItems() as $event) { 
      $start = $event->start->dateTime; 
      if (empty($start)) { 
       $start = $event->start->date; 
      } 
      printf("%s (%s)\n", $event->getSummary(), $start); 
      } 
     } 
     if (php_sapi_name() != 'cli') { 
      throw new Exception('This application must be run on the command line.'); 
     } 

    } 

    // Code Start 
    /** 
    * Returns an authorized API client. 
    * @return Google_Client the authorized client object 
    */ 
    function getClient() { 
     $client = new Google_Client(); 
     $client->setApplicationName(APPLICATION_NAME); 
     $client->setScopes(SCOPES); 
     $client->setAuthConfig(CLIENT_SECRET_PATH); 

     $client->setAccessType('offline'); 

     // Load previously authorized credentials from a file. 
     $credentialsPath = $this->expandHomeDirectory(CREDENTIALS_PATH); 
     if (file_exists($credentialsPath)) { 
     $accessToken = json_decode(file_get_contents($credentialsPath), true); 
     } 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)); 

     // Exchange authorization code for an access token. 
     $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); 

     // Store the credentials to disk. 
     if(!file_exists(dirname($credentialsPath))) { 
      mkdir(dirname($credentialsPath), 0700, true); 
     } 
     file_put_contents($credentialsPath, json_encode($accessToken)); 
     printf("Credentials saved to %s\n", $credentialsPath); 
     } 
     $client->setAccessToken($accessToken); 

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

    /** 
    * Expands the home directory alias '~' to the full path. 
    * @param string $path the path to expand. 
    * @return string the expanded path. 
    */ 
    function expandHomeDirectory($path) { 
     $homeDirectory = getenv('HOME'); 
     if (empty($homeDirectory)) { 
     $homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH'); 
     } 
     return str_replace('~', realpath($homeDirectory), $path); 
    } 
    // Code End 

`

答えて

0

資格情報フォルダのcredential.jsonファイルが生成されていないという問題がありました。私はウェブブラウザで以下のように文字列を取得していました https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=XXXXXXX&redirect_uri=XXXXX&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly&approval_prompt=auto 私のウェブブラウザでこのURLを開くとコードがあります。私はそのコードをコピーし、$ authCode = trim(CODE_I_GOT)で$ authCode = trim(fgets(STDIN))を置き換えました。 このプロセスでcredential.jsonファイルが生成された後、コードを正常に実行できました

0

あなたは多分APIは、「無効なコード」例外がスローされる理由は、アクセストークンのフォーマットが新しいで生成されたフォーマットと一致していないということであると述べ、このrelated GitHub issueを参照することAPI。

また、このコードは役立つかもしれない:

  • while getting contents, I used serialize function

    • Example: $accessToken = serialize (file_get_contents($credentialsPath));
  • while inserting contents, I used deserialize function

    • Example: $accessToken = derialize(file_put_contents($credentialsPath, $accessToken););

はあなたの問題を解決することができ$accessTokenを読んで、すべての場所で$accessTokenunserialize()を書くすべての場所でserialize()を挿入してください。

+0

ご回答ありがとうございます。私は確信が持てませんが、 "CREDENTIALS_PATH"に何か問題があると思います。 –

関連する問題