e-lodgy / oauth2-bookingsync-php
BookingSync OAuth 2.0 Client Provider for The PHP League OAuth2-Client
v0.8.0
2022-12-15 14:07 UTC
Requires
- php: ^7.4|^8.0
- ext-json: *
- league/oauth2-client: ^2.4
Requires (Dev)
- e-lodgy/coding-standard: ^1.1.3
- mockery/mockery: ^1.5.1
- php-parallel-lint/php-parallel-lint: ^1.3.2
- phpstan/phpstan: ^1.9.2
- phpunit/phpunit: ^9.5.26
This package is auto-updated.
Last update: 2024-11-11 00:38:34 UTC
README
This package provides BookingSync OAuth 2.0 support for the PHP League's OAuth 2.0 Client.
Installation
To install, use composer:
composer require bookingsync/oauth2-bookingsync-php
Usage
Usage is the same as The League's OAuth client, using \Bookingsync\OAuth2\Client\Provider\BookingSyncProvider
as the provider.
Authorization Code Flow
use Bookingsync\OAuth2\Client\Provider\BookingSyncProvider; use League\OAuth2\Client\Provider\Exception\IdentityProviderException; $provider = new BookingSyncProvider([ 'clientId' => 'XXXXXXXX', 'clientSecret' => 'XXXXXXXX', 'redirectUri' => 'https://www.example.com/callback-url', // https is mandatory for BookingSync 'scopes' => ['public'] // scopes required by your BookingSync application. ]); if (! isset($_GET['code'])) { // If we don't have an authorization code then get one $authUrl = $provider->getAuthorizationUrl(); $_SESSION['oauth2state'] = $provider->getState(); header('Location: '.$authUrl); exit; // Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); exit('Invalid state'); } else { // Try to get an access token (using the authorization code grant) $token = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); // Optional: Now you have a token you can look up a users profile data try { // Using the access token, we may look up details about the resource owner. $resourceOwner = $provider->getResourceOwner($accessToken); // Use these details to create a new profile printf('Hello %s!', $resourceOwner->getBusinessName()); } catch (IdentityProviderException $e) { // Failed to get user details exit($e->getMessage()); } // Use this to interact with an API on the users behalf echo $token->getAccessToken(); // Use this to get a new access token if the old one expires echo $token->getRefreshToken(); // Unix timestamp of when the token will expire, and need refreshing echo $token->getExpires(); }
Refreshing a Token
use Bookingsync\OAuth2\Client\Provider\BookingSyncProvider; use League\OAuth2\Client\Grant\RefreshToken; use League\OAuth2\Client\Token\AccessTokenInterface; $provider = new BookingSyncProvider([ 'clientId' => 'XXXXXXXX', 'clientSecret' => 'XXXXXXXX', 'redirectUri' => 'https://example.com/callback-url' ]); /** @var AccessTokenInterface $existingAccessToken */ $existingAccessToken = getAccessTokenFromYourDataStore(); if ($existingAccessToken->hasExpired()) { $grant = new RefreshToken(); $token = $provider->getAccessToken($grant, ['refresh_token' => $existingAccessToken->getRefreshToken()]); }
Client Credentials
use Bookingsync\OAuth2\Client\Provider\BookingSyncProvider; use League\OAuth2\Client\Grant\ClientCredentials; use League\OAuth2\Client\Provider\Exception\IdentityProviderException; $provider = new BookingSyncProvider([ 'clientId' => 'XXXXXXXX', 'clientSecret' => 'XXXXXXXX', 'redirectUri' => 'https://example.com/callback-url' ]); try { // Try to get an access token using the client credentials grant. $grant = new ClientCredentials(); $accessToken = $provider->getAccessToken($grant); } catch (IdentityProviderException $e) { // Failed to get the access token exit($e->getMessage()); }
Testing
vendor/bin/phpunit
License
The MIT License (MIT). Please see License File for more information.