# PHP SDK middleware Add functionality to requests and responses in the PHP SDK. You can add middleware when creating the PHP SDK client. When adding multiple middleware, use an array of middlewares. ## MiddlewareFactory The scope of this Factory pattern is to handle and customize the available middleware. Use the methods contained in this class to create an array of middlewares. ### Default middleware [createDefaultMiddlewares](https://github.com/commercetools/commercetools-sdk-php-v2/blob/master/lib/commercetools-base/src/Client/MiddlewareFactory.php#L26) creates an array with default values of OAuth Handler, Authentication, Logger, Retry and Correlation ID. ```php $authConfig = new ClientCredentialsConfig(new ClientCredentials($clientId, $clientSecret), [ 'handler' => $authHandler, ]); $oauthHandler = OAuthHandlerFactory::ofAuthConfig($authConfig), $logger = new Logger('client', [new StreamHandler('./logs/requests.log')]); $maxRetries = 3; $correlationIdProvider = new DefaultCorrelationIdProvider(); $middlewares = MiddlewareFactory::createDefaultMiddlewares( $oauthHandler, $logger, $maxRetries, $correlationIdProvider ); ``` ### CorrelationIdMiddleware [createCorrelationIdMiddleware](https://github.com/commercetools/commercetools-sdk-php-v2/blob/master/lib/commercetools-base/src/Client/MiddlewareFactory.php#L51) creates a middleware that adds a correlation ID to the headers of HTTP requests. ```php $correlationIdProvider = new DefaultCorrelationIdProvider(); $correlationIdMiddleware = MiddlewareFactory::createCorrelationIdMiddleware( $correlationIdProvider ); ``` ### RetryNAMiddleware [createRetryNAMiddleware](https://github.com/commercetools/commercetools-sdk-php-v2/blob/master/lib/commercetools-base/src/Client/MiddlewareFactory.php#L66) creates middleware that retries HTTP requests under certain conditions. ```php $maxRetries = 3; $retryMiddleware = MiddlewareFactory::createRetryNAMiddleware($maxRetries); ``` ### OAuthHandlerMiddleware [createMiddlewareForOAuthHandler](https://github.com/commercetools/commercetools-sdk-php-v2/blob/master/lib/commercetools-base/src/Client/MiddlewareFactory.php#L95) creates a middleware to handle OAuth 2.0 authentication, ensuring that necessary OAuth credentials are included. ```php $tokenProvider = new YourTokenProvider(); $oauthHandler = OAuthHandlerFactory::ofProvider($tokenProvider), $oauthMiddleware = MiddlewareFactory::createMiddlewareForOAuthHandler($oauthHandler); ``` ### LoggerMiddleware [createLoggerMiddleware](https://github.com/commercetools/commercetools-sdk-php-v2/blob/master/lib/commercetools-base/src/Client/MiddlewareFactory.php#L104) creates a middleware for logging HTTP requests and responses. ```php $logger = new Logger('auth'); $logger->pushHandler(new StreamHandler('./logs/requests.log', Logger::DEBUG)); $loggerMiddleware = MiddlewareFactory::createLoggerMiddleware($logger); ``` ### ReauthenticateMiddleware [createReauthenticateMiddleware](https://github.com/commercetools/commercetools-sdk-php-v2/blob/master/lib/commercetools-base/src/Client/MiddlewareFactory.php#L114C28-L114C58) creates a middleware that automatically reauthenticates HTTP requests in the event of an invalid token error (HTTP 401). It uses an OAuth2Handler to refresh the token and retry the request up to a specified number of times. ```php $maxRetries = 3; $authConfig = new ClientCredentialsConfig(new ClientCredentials($clientId, $clientSecret), [ 'handler' => $authHandler, ]); $oauthHandler = OAuthHandlerFactory::ofAuthConfig($authConfig), //$maxRetries is optional. If not specified, a default value of 1 is used $reauthMiddleware = MiddlewareFactory::createReauthenticateMiddleware($oauthHandler, $maxRetries); ``` ## Related pages - [Area overview page with navigation](/dev-tooling.md) - [Previous page: Get started](/dev-tooling/php-sdk-getting-started.md)