0

I wanted to create wordpress plugin for our music orchestra. In that wp plugin i wanted to be able to easily add event to google calendar. We use 1 shared google calendar. I have read some posts here about possibilities and ended up with this code handling google calendar:

 // Přidání funkce pro přidání události do Google Kalendáře
function add_event_to_google_calendar($event_details) {
    error_log_with_timestamp('add_event_to_google_calendar called');
    $credentials_path = plugin_dir_path(__FILE__) . 'credential.json'; // Ujistěte se, že cesta je správná
    if (!file_exists($credentials_path)) {
        error_log_with_timestamp('Credentials file not found: ' . $credentials_path);
        return [
            'error' => 'Credentials file not found.'
        ];
    }

    error_log_with_timestamp('Credentials file found: ' . $credentials_path);

    // Načtení přihlašovacích údajů
    $credentials = json_decode(file_get_contents($credentials_path), true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        error_log_with_timestamp('Error decoding credentials file: ' . json_last_error_msg());
        return [
            'error' => 'Error decoding credentials file.'
        ];
    }

    // Získání přístupového tokenu
    $token = get_google_access_token($credentials);
    if (isset($token['error'])) {
        error_log_with_timestamp('Error getting access token: ' . $token['error']);
        return [
            'error' => 'Error getting access token.test',//!!!!THIS LAST Error IF I USE POSTMAN!!!
            'details' => $token['error']
        ];
    }

    // Vytvoření události pomocí HTTP požadavku
    $calendarId = 'primary';
    $url = "https://www.googleapis.com/calendar/v3/calendars/$calendarId/events";
    $headers = [
        'Authorization: Bearer ' . $token['access_token'],
        'Content-Type: application/json'
    ];
    $response = http_post($url, json_encode($event_details), $headers);

    if ($response['status_code'] !== 200) {
        error_log_with_timestamp('Error adding event to Google Calendar: ' . $response['body']);
        return [
            'error' => 'Error adding event to Google Calendar.',
            'details' => $response['body']
        ];
    }

    $event = json_decode($response['body'], true);
    error_log_with_timestamp('Event added to Google Calendar: ' . $event['id']);
    return [
        'success' => true,
        'event_id' => $event['id']
    ];
}

But im stuck at point when i trie to create event ( via postman) and getting :

{
    "error": "Error getting access token.test"
}

I have service account for google api. i have credetial.json with all relevant data.. I dont have OAuth, but from what i read i dont need that for my usecase

2
  • And what did $token['error'] contain?
    – C3roe
    Commented Jan 17 at 10:12
  • 1
    developers.google.com/identity/protocols/oauth2/service-account tells you what to do. But it's strongly recommended (as per that documentation) to save yourself some time, and massively reduce the risk of security mistakes, and use the ready-made PHP SDK for google APIs, instead of trying to build your own HTTP requests etc. See github.com/googleapis/google-api-php-client . You can use this for the authentication step, and also to send and receive calendar data. There are code samples available on the github site to help you get started
    – ADyson
    Commented Jan 17 at 10:19

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.