Spotify
        
        extends OAuth2Provider
    
    
            
            in package
            
        
    
            
            implements
                            ClientCredentials,                             CSRFToken,                             TokenRefresh                    
    
    
Spotify OAuth2
Tags
Table of Contents
Interfaces
- ClientCredentials
 - Indicates whether the provider is capable of the OAuth2 client credentials authentication flow.
 - CSRFToken
 - Specifies the methods required for the OAuth2 CSRF token validation ("state parameter")
 - TokenRefresh
 - Indicates whether the provider is capable of the OAuth2 token refresh.
 
Constants
- DEFAULT_SCOPES = [self::SCOPE_PLAYLIST_READ_COLLABORATIVE, self::SCOPE_PLAYLIST_MODIFY_PUBLIC, self::SCOPE_USER_FOLLOW_MODIFY, self::SCOPE_USER_FOLLOW_READ, self::SCOPE_USER_LIBRARY_READ, self::SCOPE_USER_LIBRARY_MODIFY, self::SCOPE_USER_TOP_READ, self::SCOPE_USER_READ_EMAIL, self::SCOPE_STREAMING, self::SCOPE_USER_READ_PLAYBACK_STATE, self::SCOPE_USER_MODIFY_PLAYBACK_STATE, self::SCOPE_USER_READ_CURRENTLY_PLAYING, self::SCOPE_USER_READ_RECENTLY_PLAYED]
 - SCOPE_PLAYLIST_MODIFY_PRIVATE = 'playlist-modify-private'
 - SCOPE_PLAYLIST_MODIFY_PUBLIC = 'playlist-modify-public'
 - SCOPE_PLAYLIST_READ_COLLABORATIVE = 'playlist-read-collaborative'
 - SCOPE_PLAYLIST_READ_PRIVATE = 'playlist-read-private'
 - SCOPE_STREAMING = 'streaming'
 - SCOPE_UGC_IMAGE_UPLOAD = 'ugc-image-upload'
 - SCOPE_USER_CREATE_PARTNER = 'user-create-partner'
 - SCOPE_USER_FOLLOW_MODIFY = 'user-follow-modify'
 - SCOPE_USER_FOLLOW_READ = 'user-follow-read'
 - SCOPE_USER_LIBRARY_MODIFY = 'user-library-modify'
 - SCOPE_USER_LIBRARY_READ = 'user-library-read'
 - SCOPE_USER_MANAGE_ENTITLEMENTS = 'user-manage-entitlements'
 - SCOPE_USER_MANAGE_PARTNER = 'user-manage-partner'
 - SCOPE_USER_MODIFY_PLAYBACK_STATE = 'user-modify-playback-state'
 - SCOPE_USER_READ_CURRENTLY_PLAYING = 'user-read-currently-playing'
 - SCOPE_USER_READ_EMAIL = 'user-read-email'
 - SCOPE_USER_READ_PLAYBACK_POSITION = 'user-read-playback-position'
 - SCOPE_USER_READ_PLAYBACK_STATE = 'user-read-playback-state'
 - SCOPE_USER_READ_PRIVATE = 'user-read-private'
 - SCOPE_USER_READ_RECENTLY_PLAYED = 'user-read-recently-played'
 - SCOPE_USER_SOA_LINK = 'user-soa-link'
 - SCOPE_USER_SOA_UNLINK = 'user-soa-unlink'
 - SCOPE_USER_TOP_READ = 'user-top-read'
 - MAGIC_PROPERTIES = ['apiDocs', 'apiURL', 'applicationURL', 'serviceName', 'userRevokeURL']
 
Properties
- $accessTokenURL : string
 - $apiDocs : string|null
 - $apiURL : string
 - $applicationURL : string|null
 - $authURL : string
 - $clientCredentialsTokenURL : string|null
 - An optional client credentials token endpoint in case the provider supports ClientCredentials.
 - $http : ClientInterface
 - $logger : LoggerInterface
 - $options : OAuthOptions|SettingsContainerInterface
 - $refreshTokenURL : string
 - An optional refresh token endpoint in case the provider supports TokenRefresh.
 - $requestFactory : RequestFactoryInterface
 - $revokeURL : string
 - an optional URL for application side token revocation
 - $serviceName : string
 - the name of the provider/class (magic)
 - $storage : OAuthStorageInterface
 - $streamFactory : StreamFactoryInterface
 - $uriFactory : UriFactoryInterface
 - $userRevokeURL : string|null
 
Methods
- __construct() : mixed
 - OAuthProvider constructor.
 - __get() : string|null
 - Magic getter for the properties specified in self::ALLOWED_PROPERTIES
 - getAccessToken() : AccessToken
 - Obtains an OAuth2 access token with the given $code, verifies the $state if the provider implements the CSRFToken interface, and returns an AccessToken object
 - getAccessTokenFromStorage() : AccessToken
 - Gets an access token from the current OAuthStorageInterface (shorthand/convenience)
 - getAuthURL() : UriInterface
 - getClientCredentialsToken() : AccessToken
 - getRequestAuthorization() : RequestInterface
 - getStorage() : OAuthStorageInterface
 - Returns the current OAuthStorageInterface
 - InvalidateAccessToken() : bool
 - me() : ResponseInterface
 - refreshAccessToken() : AccessToken
 - request() : ResponseInterface
 - Prepares an API request to $path with the given parameters, gets authorization, fires the request and returns a PSR-7 ResponseInterface with the corresponding API response
 - sendRequest() : ResponseInterface
 - setLogger() : static
 - Sets an optional PSR-3 LoggerInterface
 - setRequestFactory() : static
 - Sets an optional PSR-17 RequestFactoryInterface
 - setStorage() : static
 - Sets an optional OAuthStorageInterface
 - setStreamFactory() : static
 - Sets an optional PSR-17 StreamFactoryInterface
 - setUriFactory() : static
 - Sets an optional PSR-17 UriFactoryInterface
 - storeAccessToken() : static
 - Sets an access token in the current OAuthStorageInterface (shorthand/convenience)
 - cleanBodyParams() : array<string|int, mixed>
 - Cleans an array of body parameters
 - cleanQueryParams() : array<string|int, mixed>
 - Cleans an array of query parameters
 - construct() : void
 - A replacement constructor that you can call in extended classes, so that you don't have to implement the monstrous original `__construct()`
 - createAccessToken() : AccessToken
 - Creates an access token with the provider set to $this->serviceName
 - getAccessTokenRequestBodyParams() : array<string|int, mixed>
 - prepares the request body parameters for the access token request
 - getAuthURLRequestParams() : array<string|int, mixed>
 - prepares the query parameters for the auth URL
 - getClientCredentialsTokenRequestBodyParams() : array<string|int, mixed>
 - prepares the request body parameters for the client credentials token request
 - getRefreshAccessTokenRequestBodyParams() : array<string|int, mixed>
 - prepares the request body parameters for the token refresh
 - getRequestBody() : StreamInterface
 - Prepares the request body
 - getRequestHeaders() : array<string|int, mixed>
 - Prepare request headers
 - getRequestTarget() : string
 - Determine the request target from the given URI (path segment or URL) with respect to $apiURL, anything except host and path will be ignored, scheme will always be set to "https".
 - getRequestURL() : string
 - Prepares the request URL
 - getTokenResponseData() : array<string|int, mixed>
 - extracts the data from the access token response and returns an array with the key->value pairs contained
 - nonce() : string
 - returns a 32 byte random string (in hexadecimal representation) for use as a nonce
 - parseTokenResponse() : AccessToken
 - Parses the response from a request to the token endpoint
 - sendAccessTokenRequest() : ResponseInterface
 - sends a request to the access/refresh token endpoint $url with the given $body as form data
 - sendClientCredentialsTokenRequest() : ResponseInterface
 - sends a request to the client credentials endpoint, using basic authentication
 
Constants
DEFAULT_SCOPES
    public
        mixed
    DEFAULT_SCOPES
    = [self::SCOPE_PLAYLIST_READ_COLLABORATIVE, self::SCOPE_PLAYLIST_MODIFY_PUBLIC, self::SCOPE_USER_FOLLOW_MODIFY, self::SCOPE_USER_FOLLOW_READ, self::SCOPE_USER_LIBRARY_READ, self::SCOPE_USER_LIBRARY_MODIFY, self::SCOPE_USER_TOP_READ, self::SCOPE_USER_READ_EMAIL, self::SCOPE_STREAMING, self::SCOPE_USER_READ_PLAYBACK_STATE, self::SCOPE_USER_MODIFY_PLAYBACK_STATE, self::SCOPE_USER_READ_CURRENTLY_PLAYING, self::SCOPE_USER_READ_RECENTLY_PLAYED]
    
    
    
SCOPE_PLAYLIST_MODIFY_PRIVATE
    public
        mixed
    SCOPE_PLAYLIST_MODIFY_PRIVATE
    = 'playlist-modify-private'
    
    
    
SCOPE_PLAYLIST_MODIFY_PUBLIC
    public
        mixed
    SCOPE_PLAYLIST_MODIFY_PUBLIC
    = 'playlist-modify-public'
    
    
    
SCOPE_PLAYLIST_READ_COLLABORATIVE
    public
        mixed
    SCOPE_PLAYLIST_READ_COLLABORATIVE
    = 'playlist-read-collaborative'
    
    
    
SCOPE_PLAYLIST_READ_PRIVATE
    public
        mixed
    SCOPE_PLAYLIST_READ_PRIVATE
    = 'playlist-read-private'
    
    
    
SCOPE_STREAMING
    public
        mixed
    SCOPE_STREAMING
    = 'streaming'
    
    
    
SCOPE_UGC_IMAGE_UPLOAD
    public
        mixed
    SCOPE_UGC_IMAGE_UPLOAD
    = 'ugc-image-upload'
    
    
    
    Tags
SCOPE_USER_CREATE_PARTNER
    public
        mixed
    SCOPE_USER_CREATE_PARTNER
    = 'user-create-partner'
    
    
    
SCOPE_USER_FOLLOW_MODIFY
    public
        mixed
    SCOPE_USER_FOLLOW_MODIFY
    = 'user-follow-modify'
    
    
    
SCOPE_USER_FOLLOW_READ
    public
        mixed
    SCOPE_USER_FOLLOW_READ
    = 'user-follow-read'
    
    
    
SCOPE_USER_LIBRARY_MODIFY
    public
        mixed
    SCOPE_USER_LIBRARY_MODIFY
    = 'user-library-modify'
    
    
    
SCOPE_USER_LIBRARY_READ
    public
        mixed
    SCOPE_USER_LIBRARY_READ
    = 'user-library-read'
    
    
    
SCOPE_USER_MANAGE_ENTITLEMENTS
    public
        mixed
    SCOPE_USER_MANAGE_ENTITLEMENTS
    = 'user-manage-entitlements'
    
    
    
SCOPE_USER_MANAGE_PARTNER
    public
        mixed
    SCOPE_USER_MANAGE_PARTNER
    = 'user-manage-partner'
    
    
    
SCOPE_USER_MODIFY_PLAYBACK_STATE
    public
        mixed
    SCOPE_USER_MODIFY_PLAYBACK_STATE
    = 'user-modify-playback-state'
    
    
    
SCOPE_USER_READ_CURRENTLY_PLAYING
    public
        mixed
    SCOPE_USER_READ_CURRENTLY_PLAYING
    = 'user-read-currently-playing'
    
    
    
SCOPE_USER_READ_EMAIL
    public
        mixed
    SCOPE_USER_READ_EMAIL
    = 'user-read-email'
    
    
    
SCOPE_USER_READ_PLAYBACK_POSITION
    public
        mixed
    SCOPE_USER_READ_PLAYBACK_POSITION
    = 'user-read-playback-position'
    
    
    
SCOPE_USER_READ_PLAYBACK_STATE
    public
        mixed
    SCOPE_USER_READ_PLAYBACK_STATE
    = 'user-read-playback-state'
    
    
    
SCOPE_USER_READ_PRIVATE
    public
        mixed
    SCOPE_USER_READ_PRIVATE
    = 'user-read-private'
    
    
    
SCOPE_USER_READ_RECENTLY_PLAYED
    public
        mixed
    SCOPE_USER_READ_RECENTLY_PLAYED
    = 'user-read-recently-played'
    
    
    
SCOPE_USER_SOA_LINK
    public
        mixed
    SCOPE_USER_SOA_LINK
    = 'user-soa-link'
    
    
    
SCOPE_USER_SOA_UNLINK
    public
        mixed
    SCOPE_USER_SOA_UNLINK
    = 'user-soa-unlink'
    
    
    
SCOPE_USER_TOP_READ
    public
        mixed
    SCOPE_USER_TOP_READ
    = 'user-top-read'
    
    
    
MAGIC_PROPERTIES
    protected
        array<string|int, string>
    MAGIC_PROPERTIES
    = ['apiDocs', 'apiURL', 'applicationURL', 'serviceName', 'userRevokeURL']
    
    
    
Properties
$accessTokenURL
    protected
        string
    $accessTokenURL
     = 'https://accounts.spotify.com/api/token'
    
    
    
$apiDocs
    protected
        string|null
    $apiDocs
     = 'https://developer.spotify.com/documentation/web-api/'
    
    
    
$apiURL
    protected
        string
    $apiURL
     = 'https://api.spotify.com'
    
    
    
$applicationURL
    protected
        string|null
    $applicationURL
     = 'https://developer.spotify.com/dashboard'
    
    
    
$authURL
    protected
        string
    $authURL
     = 'https://accounts.spotify.com/authorize'
    
    
    
$clientCredentialsTokenURL
An optional client credentials token endpoint in case the provider supports ClientCredentials.
    protected
        string|null
    $clientCredentialsTokenURL
     = null
        If the provider supports client credentials and $clientCredentialsTokenURL is null, $accessTokenURL will be used instead.
$http
    protected
        ClientInterface
    $http
    
    
    
    
$logger
    protected
        LoggerInterface
    $logger
     = new NullLogger()
    
    
    
$options
    protected
        OAuthOptions|SettingsContainerInterface
    $options
    
    
    
    
$refreshTokenURL
An optional refresh token endpoint in case the provider supports TokenRefresh.
    protected
        string
    $refreshTokenURL
    
        If the provider supports token refresh and $refreshTokenURL is null, $accessTokenURL will be used instead.
Tags
$requestFactory
    protected
        RequestFactoryInterface
    $requestFactory
    
    
    
    
$revokeURL
an optional URL for application side token revocation
    protected
        string
    $revokeURL
    
    
    
    
    Tags
$serviceName
the name of the provider/class (magic)
    protected
        string
    $serviceName
    
    
    
    
$storage
    protected
        OAuthStorageInterface
    $storage
     = new MemoryStorage()
    
    
    
$streamFactory
    protected
        StreamFactoryInterface
    $streamFactory
    
    
    
    
$uriFactory
    protected
        UriFactoryInterface
    $uriFactory
    
    
    
    
$userRevokeURL
    protected
        string|null
    $userRevokeURL
     = 'https://www.spotify.com/account/apps/'
    
    
    
Methods
__construct()
OAuthProvider constructor.
    public
                    __construct(OAuthOptions|SettingsContainerInterface $options, ClientInterface $http, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, UriFactoryInterface $uriFactory[, OAuthStorageInterface $storage = new MemoryStorage() ][, LoggerInterface $logger = new NullLogger() ]) : mixed
    Parameters
- $options : OAuthOptions|SettingsContainerInterface
 - $http : ClientInterface
 - $requestFactory : RequestFactoryInterface
 - $streamFactory : StreamFactoryInterface
 - $uriFactory : UriFactoryInterface
 - $storage : OAuthStorageInterface = new MemoryStorage()
 - $logger : LoggerInterface = new NullLogger()
 
__get()
Magic getter for the properties specified in self::ALLOWED_PROPERTIES
    public
        final            __get(string $name) : string|null
    Parameters
- $name : string
 
Return values
string|nullgetAccessToken()
Obtains an OAuth2 access token with the given $code, verifies the $state if the provider implements the CSRFToken interface, and returns an AccessToken object
    public
                    getAccessToken(string $code[, string|null $state = null ]) : AccessToken
    Parameters
- $code : string
 - $state : string|null = null
 
Tags
Return values
AccessTokengetAccessTokenFromStorage()
Gets an access token from the current OAuthStorageInterface (shorthand/convenience)
    public
                    getAccessTokenFromStorage() : AccessToken
    Tags
Return values
AccessTokengetAuthURL()
    public
                    getAuthURL([array<string|int, mixed>|null $params = null ][, array<string|int, string>|null $scopes = null ]) : UriInterface
    Parameters
- $params : array<string|int, mixed>|null = null
 - $scopes : array<string|int, string>|null = null
 
Tags
Return values
UriInterfacegetClientCredentialsToken()
    public
                    getClientCredentialsToken([array<string|int, string>|null $scopes = null ]) : AccessToken
    Parameters
- $scopes : array<string|int, string>|null = null
 
Tags
Return values
AccessTokengetRequestAuthorization()
    public
                    getRequestAuthorization(RequestInterface $request[, AccessToken|null $token = null ]) : RequestInterface
    Parameters
- $request : RequestInterface
 - $token : AccessToken|null = null
 
Tags
Return values
RequestInterfacegetStorage()
Returns the current OAuthStorageInterface
    public
        final            getStorage() : OAuthStorageInterface
    Tags
Return values
OAuthStorageInterfaceInvalidateAccessToken()
    public
                    InvalidateAccessToken([AccessToken|null $token = null ]) : bool
    Parameters
- $token : AccessToken|null = null
 
Tags
Return values
boolme()
    public
                    me() : ResponseInterface
    Tags
Return values
ResponseInterfacerefreshAccessToken()
    public
                    refreshAccessToken([AccessToken|null $token = null ]) : AccessToken
    Parameters
- $token : AccessToken|null = null
 
Tags
Return values
AccessTokenrequest()
Prepares an API request to $path with the given parameters, gets authorization, fires the request and returns a PSR-7 ResponseInterface with the corresponding API response
    public
                    request(string $path[, array<string|int, mixed>|null $params = null ][, string|null $method = null ][, StreamInterface|array<string|int, mixed>|string|null $body = null ][, array<string|int, mixed>|null $headers = null ][, string|null $protocolVersion = null ]) : ResponseInterface
    Parameters
- $path : string
 - $params : array<string|int, mixed>|null = null
 - $method : string|null = null
 - $body : StreamInterface|array<string|int, mixed>|string|null = null
 - $headers : array<string|int, mixed>|null = null
 - $protocolVersion : string|null = null
 
Tags
Return values
ResponseInterfacesendRequest()
    public
        final            sendRequest(RequestInterface $request) : ResponseInterface
    Parameters
- $request : RequestInterface
 
Tags
Return values
ResponseInterfacesetLogger()
Sets an optional PSR-3 LoggerInterface
    public
        final            setLogger(LoggerInterface $logger) : static
    Parameters
- $logger : LoggerInterface
 
Tags
Return values
staticsetRequestFactory()
Sets an optional PSR-17 RequestFactoryInterface
    public
        final            setRequestFactory(RequestFactoryInterface $requestFactory) : static
    Parameters
- $requestFactory : RequestFactoryInterface
 
Tags
Return values
staticsetStorage()
Sets an optional OAuthStorageInterface
    public
        final            setStorage(OAuthStorageInterface $storage) : static
    Parameters
- $storage : OAuthStorageInterface
 
Tags
Return values
staticsetStreamFactory()
Sets an optional PSR-17 StreamFactoryInterface
    public
        final            setStreamFactory(StreamFactoryInterface $streamFactory) : static
    Parameters
- $streamFactory : StreamFactoryInterface
 
Tags
Return values
staticsetUriFactory()
Sets an optional PSR-17 UriFactoryInterface
    public
        final            setUriFactory(UriFactoryInterface $uriFactory) : static
    Parameters
- $uriFactory : UriFactoryInterface
 
Tags
Return values
staticstoreAccessToken()
Sets an access token in the current OAuthStorageInterface (shorthand/convenience)
    public
                    storeAccessToken(AccessToken $token) : static
    Parameters
- $token : AccessToken
 
Tags
Return values
staticcleanBodyParams()
Cleans an array of body parameters
    protected
                    cleanBodyParams(iterable<string|int, mixed> $params) : array<string|int, mixed>
    Parameters
- $params : iterable<string|int, mixed>
 
Return values
array<string|int, mixed>cleanQueryParams()
Cleans an array of query parameters
    protected
                    cleanQueryParams(iterable<string|int, mixed> $params) : array<string|int, mixed>
    Parameters
- $params : iterable<string|int, mixed>
 
Return values
array<string|int, mixed>construct()
A replacement constructor that you can call in extended classes, so that you don't have to implement the monstrous original `__construct()`
    protected
                    construct() : void
    createAccessToken()
Creates an access token with the provider set to $this->serviceName
    protected
                    createAccessToken() : AccessToken
    Tags
Return values
AccessTokengetAccessTokenRequestBodyParams()
prepares the request body parameters for the access token request
    protected
                    getAccessTokenRequestBodyParams(string $code) : array<string|int, mixed>
    Parameters
- $code : string
 
Return values
array<string|int, mixed>getAuthURLRequestParams()
prepares the query parameters for the auth URL
    protected
                    getAuthURLRequestParams(array<string|int, mixed> $params, array<string|int, mixed> $scopes) : array<string|int, mixed>
    Parameters
- $params : array<string|int, mixed>
 - $scopes : array<string|int, mixed>
 
Return values
array<string|int, mixed>getClientCredentialsTokenRequestBodyParams()
prepares the request body parameters for the client credentials token request
    protected
                    getClientCredentialsTokenRequestBodyParams(array<string|int, string>|null $scopes) : array<string|int, mixed>
    Parameters
- $scopes : array<string|int, string>|null
 
Return values
array<string|int, mixed>getRefreshAccessTokenRequestBodyParams()
prepares the request body parameters for the token refresh
    protected
                    getRefreshAccessTokenRequestBodyParams(string $refreshToken) : array<string|int, mixed>
    Parameters
- $refreshToken : string
 
Return values
array<string|int, mixed>getRequestBody()
Prepares the request body
    protected
                    getRequestBody(StreamInterface|array<string|int, mixed>|string $body, RequestInterface $request) : StreamInterface
    Parameters
- $body : StreamInterface|array<string|int, mixed>|string
 - $request : RequestInterface
 
Tags
Return values
StreamInterfacegetRequestHeaders()
Prepare request headers
    protected
                    getRequestHeaders([array<string|int, mixed>|null $headers = null ]) : array<string|int, mixed>
    Parameters
- $headers : array<string|int, mixed>|null = null
 
Return values
array<string|int, mixed>getRequestTarget()
Determine the request target from the given URI (path segment or URL) with respect to $apiURL, anything except host and path will be ignored, scheme will always be set to "https".
    protected
                    getRequestTarget(string $uri) : string
    Throws if the host of a given URL does not match the host of $apiURL.
Parameters
- $uri : string
 
Tags
Return values
stringgetRequestURL()
Prepares the request URL
    protected
                    getRequestURL(string $path[, array<string|int, mixed>|null $params = null ]) : string
    Parameters
- $path : string
 - $params : array<string|int, mixed>|null = null
 
Return values
stringgetTokenResponseData()
extracts the data from the access token response and returns an array with the key->value pairs contained
    protected
                    getTokenResponseData(ResponseInterface $response) : array<string|int, mixed>
    we don't bother checking the content type here as it's sometimes vendor specific, not set or plain wrong: the spec mandates a JSON body which is what almost all providers send - weird exceptions:
- mixcloud sends JSON with a "text/javascript" header
 - deezer sends form-data with a "text/html" header (???)
 - silly amazon sends gzip compressed data... (handled by decodeJSON)
 
Parameters
- $response : ResponseInterface
 
Tags
Return values
array<string|int, mixed>nonce()
returns a 32 byte random string (in hexadecimal representation) for use as a nonce
    protected
                    nonce([int $bytes = 32 ]) : string
    Parameters
- $bytes : int = 32
 
Tags
Return values
stringparseTokenResponse()
Parses the response from a request to the token endpoint
    protected
                    parseTokenResponse(ResponseInterface $response) : AccessToken
    Parameters
- $response : ResponseInterface
 
Tags
Return values
AccessTokensendAccessTokenRequest()
sends a request to the access/refresh token endpoint $url with the given $body as form data
    protected
                    sendAccessTokenRequest(string $url, array<string|int, mixed> $body) : ResponseInterface
    Parameters
- $url : string
 - $body : array<string|int, mixed>
 
Return values
ResponseInterfacesendClientCredentialsTokenRequest()
sends a request to the client credentials endpoint, using basic authentication
    protected
                    sendClientCredentialsTokenRequest(string $url, array<string|int, mixed> $body) : ResponseInterface
    Parameters
- $url : string
 - $body : array<string|int, mixed>