/** * @param ClientHttpErrorEvent $event */ public function onClientHttpErrorEvent(ClientHttpErrorEvent $event) { $response = $event->getResponse(); $requestParams = $event->getRequestParams(); $method = $event->getMethod(); $url = $event->getUrl(); switch ($response->getStatusCode()) { case 400: $class = BadRequestException::class; break; case 401: $class = AuthenticationException::class; break; case 403: $class = ForbiddenException::class; break; case 404: $class = NotFoundException::class; break; case 429: $class = ToManyRequestsException::class; break; case 500: $class = InternalApplicationException::class; break; default: $class = ApiException::class; } $statusCode = $response->getStatusCode(); $date = current($response->getHeader('Date')); $requestId = current($response->getHeader('X-Request-Id')); $body = $response->getBody()->getContents(); $decoded = json_decode($body, true); if (is_array($decoded)) { $errors = []; $messages = []; foreach ($decoded['error_messages'] as $field => $messageContexts) { foreach ($messageContexts as $messageContext) { $errors[] = ['field' => $field, 'code' => $messageContext['code'], 'message' => $messageContext['message'], 'params' => $messageContext['params']]; $messages['message'] = $messageContext['message']; } } $message = implode('; ', $messages); $code = $decoded['error_code']; } else { $message = 'Invalid JSON describing error returned'; $errors = null; $code = 0; } throw new $class($statusCode, $date, $requestId, $errors, $requestParams, $method, $url, $message, $code); }