2016-12-09 4 views
0

Google Calendar не работает должным образом, Получение ошибки «Неустранимая ошибка: исключить исключение« InvalidArgumentException »с сообщением« Недопустимый код »в E: \ Extrawork \ wamp \ www \ alpha \ application \ modules \ myaccount \ контроллеры \ 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 (fgets (STDIN)) на $ authCode = trim (CODE_I_GOT). Этот процесс сгенерировал файл credential.json, после чего мне удалось успешно запустить мой код

0

Вы можете обратиться с этим related GitHub issue, который заявил, что может быть причиной, почему API бросает исключение«неверный код»является то, что формат для маркеров доступа не совпадает с форматом, генерируемым в новом 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););

Попробуйте вставить serialize() во всех местах, которые пишут $accessToken и unserialize() во всех местах, которые считывают $accessToken может решить вашу проблему.

+0

Спасибо за ваш ответ. Но я уже пробовал это, я не нашел успеха. Я не уверен, но я верю, что что-то не так с «CREDENTIALS_PATH». –

Смежные вопросы