Cronofy - one API for all the calendars (Google, iCloud, Exchange, Office 365, Outlook.com)
To see this API wrapper in action see our sample app here
Note: if upgrading from a v0.x.x version to v1.0.0, please read the mirgation guide
In order to use the Cronofy API you will need to create a developer account.
From there you can use your Calendar Sandbox
to access your own calendars, or you can create an OAuth application
to obtain an OAuth client_id
and client_secret
to be able to use the full
API.
Generate a link for a user to grant access to their calendars:
$redirect_uri = "http://yoursite.dev/oauth2/callback";
$cronofy = new Cronofy\Cronofy(["client_id" => "clientId"]);
$params = [
'redirect_uri' => $redirect_uri,
'scope' => ['read_account','list_calendars','read_events','create_event','delete_event']
];
$auth = $cronofy->getAuthorizationURL($params);
The redirect URI is a page on your website that will handle the OAuth 2.0
callback and receive a code
parameter. You can then use that code to retrieve
an OAuth token granting access to the user's Cronofy account:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret"
]);
$params = [
'redirect_uri' => $redirect_uri,
'code' => $code
];
$token=$cronofy->requestToken($params);
You should save the response's AccessToken
and RefreshToken
for later use.
Note that the exact same redirect URI must be passed to both methods for access to be granted.
Get a list of all the user's calendars:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$calendar = $cronofy->listCalendars();
Get a list of all the user's events:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'tzid' => 'Etc/UTC'
];
$events = $cronofy->readEvents($params);
foreach($events->each() as $event){
// process event
}
To create/update an event in the user's calendar:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'calendar_id' => 'calendarID',
'event_id' => 'event_test_12345679',
'summary' => 'test event 2',
'description' => 'some event data here',
'start' => '2015-12-07T09:00:00Z',
'end' => '2015-12-08T10:00:00Z'
];
$new_event = $cronofy->upsertEvent($params);
To delete an event from user's calendar:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'calendar_id' => 'calendarID',
'event_id' => 'EventID'
];
$delete = $cronofy->deleteEvent($params);
To delete an external event from a user's calendar:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'calendar_id' => 'calendarID',
'event_uid' => 'EventUID'
];
$delete = $cronofy->deleteExternalEvent($params);
To elevate a client's permissions for a user's calendar(s):
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'permissions' => [
[
'calendar_id' => 'calendarID_1',
'permission_level' => 'unrestricted'
],
[
'calendar_id' => 'calendarID_2',
'permission_level' => 'unrestricted'
]
],
'redirect_uri' => 'http://yoursite.dev/elevate/callback'
];
$response = $cronofy->elevatedPermissions($params);
To authorize a user's account using a service account:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'email' => $email,
'callback_url' => $callback_url,
'scope' => ['read_account','list_calendars','read_events','create_event','delete_event']
];
$response = $cronofy->authorizeWithServiceAccount($params);
Note: You will need to use a Service Account access token to perform this action.
To create a calendar for a user's account profile:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$params = [
'profile_id' => $account_profile_id,
'name' => $new_calendar_name
];
$response = $cronofy->createCalendar($params);
To use an alternative data center:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken",
"data_center" => "DataCenter"
]);
To retrieve all availability rules saved against an account:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
$response = $cronofy->listAvailabilityRules();
To retrieve an availability rule:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
// The String that uniquely identifies the availability rule.
$rule_id = "default";
$response = $cronofy->getAvailabilityRule($rule_id);
To delete an availability rule for the authenticated account:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
// The String that uniquely identifies the availability rule.
$rule_id = "default";
$response = $cronofy->deleteAvailabilityRule($rule_id);
To creates or update an availability rule for the authenticated account:
$cronofy = new Cronofy\Cronofy([
"client_id" => "clientId",
"client_secret" => "ClientSecret",
"access_token" => "AccessToken",
"refresh_token" => "RefreshToken"
]);
// The details of the event to create or update:
$params = [
"availability_rule_id" => "default",
"calendar_ids" => ["cal_123"],
"tzid" => "America/Chicago",
"weekly_periods" => [
[
"day" => "monday",
"start_time" => "09:30",
"end_time" => "12:30"
],
[
"day" => "wednesday",
"start_time" => "09:30",
"end_time" => "12:30"
]
]
];
$response = $cronofy->createAvailabilityRule($params);
make test
v0.X.X
->v1.0.0
: version1.0.0
adds namespacing and standardizes the names of public methods to camelCase (whereas previously some methods were named with camel_case). Where in v0.29.0 you would have written$cronofy = new Cronofy();
and$calendar = $cronofy->list_calendars();
, for v1.0.0 you should write$cronofy = new Cronofy\Cronofy();
and$calendar = $cronofy->listCalendars();
.