| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- <?php
 
- namespace Qcloud\Cos;
 
- use Qcloud\Cos\Exception\ServiceResponseException;
 
- use GuzzleHttp\Promise\PromiseInterface;
 
- use GuzzleHttp\Psr7;
 
- use Psr\Http\Message\RequestInterface;
 
- use Psr\Http\Message\ResponseInterface;
 
- use GuzzleHttp\Exception\RequestException;
 
- class ExceptionMiddleware {
 
-     private $nextHandler;
 
-     protected $parser;
 
-     protected $defaultException;
 
-     /**
 
-      * @param callable $nextHandler Next handler to invoke.
 
-      */
 
-     public function __construct(callable $nextHandler) {
 
-         $this->nextHandler = $nextHandler;
 
-         $this->parser = new ExceptionParser();
 
-         $this->defaultException = 'Qcloud\Cos\Exception\ServiceResponseException';
 
-     }
 
-     /**
 
-      * @param RequestInterface $request
 
-      * @param array            $options
 
-      *
 
-      * @return PromiseInterface
 
-      */
 
-     public function __invoke(RequestInterface $request, array $options) {
 
-         $fn = $this->nextHandler;
 
-         return $fn($request, $options)->then(
 
-                     function (ResponseInterface $response) use ($request) {
 
- 						return $this->handle($request, $response);
 
-                     }
 
- 		);
 
- 	}
 
- 	public function handle(RequestInterface $request, ResponseInterface $response) {
 
- 		$code = $response->getStatusCode();
 
- 		if ($code < 400) {
 
- 			return $response;
 
- 		}
 
- 		//throw RequestException::create($request, $response);
 
-         $parts = $this->parser->parse($request, $response);
 
-         $className = 'Qcloud\\Cos\\Exception\\' . $parts['code'];
 
-         if (substr($className, -9) !== 'Exception') {
 
-             $className .= 'Exception';
 
-         }
 
-         $className = class_exists($className) ? $className : $this->defaultException;
 
-         throw $this->createException($className, $request, $response, $parts);
 
- 	}
 
-     protected function createException($className, RequestInterface $request, ResponseInterface $response, array $parts) {
 
-         $class = new $className($parts['message']);
 
-         if ($class instanceof ServiceResponseException) {
 
-             $class->setExceptionCode($parts['code']);
 
-             $class->setExceptionType($parts['type']);
 
-             $class->setResponse($response);
 
-             $class->setRequest($request);
 
-             $class->setRequestId($parts['request_id']);
 
-         }
 
-         return $class;
 
-     }
 
- }
 
 
  |