3

Google calendar does not work

 3 years ago
source link: https://www.codesd.com/item/google-calendar-does-not-work.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Google calendar does not work

advertisements

Google calendar not working properly, Getting an error "Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Invalid code' in E:\Extrawork\wamp\www\alpha\application\modules\myaccount\controllers\google-api\src\Google\Client.php"

Can someone help me please and thank you ?

    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


You may refer with this related GitHub issue which stated that maybe the reason why API is throwing a 'Invalid code' exception is that the format for access token does not match with the format generated in new API.

This code might also help:

  • 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););

Try inserting serialize() in all places that write $accessToken and unserialize() in all places that read $accessToken can fix your problem.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK