1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
<?php
namespace Commercetools\Core\Client\OAuth;
use GuzzleHttp\Client;
class CredentialTokenProvider implements RefreshTokenProvider
{
const GRANT_TYPE = 'grant_type';
const GRANT_TYPE_CLIENT_CREDENTIALS = 'client_credentials';
const SCOPE = 'scope';
const ACCESS_TOKEN = 'access_token';
const EXPIRES_IN = 'expires_in';
private $client;
private $credentials;
private $accessTokenUrl;
public function __construct(Client $client, $accessTokenUrl, ClientCredentials $credentials)
{
$this->accessTokenUrl = $accessTokenUrl;
$this->client = $client;
$this->credentials = $credentials;
}
public function getToken()
{
$data = [
self::GRANT_TYPE => self::GRANT_TYPE_CLIENT_CREDENTIALS
];
if (!empty($this->credentials->getScope())) {
$data[self::SCOPE] = $this->credentials->getScope();
}
$options = [
'form_params' => $data,
'auth' => [$this->credentials->getClientId(), $this->credentials->getClientSecret()]
];
$result = $this->client->post($this->accessTokenUrl, $options);
$body = json_decode((string)$result->getBody(), true);
return new Token((string)$body[self::ACCESS_TOKEN], (int)$body[self::EXPIRES_IN], $body[self::SCOPE]);
}
public function refreshToken()
{
return $this->getToken();
}
}