Adapted from Commerceguys/guzzle-oauth2-plugin Provides an OAuth2 middleware for Guzzle version 6+.
- Acquires access tokens via one of the supported grant types (code, client credentials, user credentials, refresh token). Or you can set an access token yourself.
- Supports refresh tokens (stores them and uses them to get new access tokens).
- Handles token expiration (acquires new tokens and retries failed requests).
On Windows, you must put the openssl.cnf file that comes with your version of PHP at the following location:
C:\usr\local\ssl\openssl.cnf
First make sure you have all the dependencies in place by running composer install --prefer-dist
. You'll also need node installed to run the tests. You can simply run make test
to start the node server, run the tests and then shut down the node server.
Alternatively, if you would like to run the node server in debug mode, you can run node tests/server.js 8126 true
and then run vendor/bin/phpunit
to run the tests.
use GuzzleHttp\Client;
use Frankkessler\Guzzle\Oauth2\GrantType\RefreshToken;
use Frankkessler\Guzzle\Oauth2\GrantType\PasswordCredentials;
use Frankkessler\Guzzle\Oauth2\Oauth2Client;
$base_uri = 'https://example.com';
$client = new Oauth2Client(['base_uri' => $base_uri]);
$config = [
'username' => '[email protected]',
'password' => 'test password',
'client_id' => 'test-client',
'scope' => 'administration',
];
$token = new PasswordCredentials($config);
$client->setGrantType($token);
$refreshToken = new RefreshToken($config);
$client->setRefreshTokenGrantType($refreshToken);
$response = $client->get('https://example.com/api/user/me');
$response_headers = $response->getHeaders();
$response_code = $response->getStatusCode();
$response_body = (string) $response->getBody();
// Use $client->getAccessToken(); and $client->getRefreshToken() to get tokens
// that can be persisted for subsequent requests.