You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					173 lines
				
				4.1 KiB
			
		
		
			
		
	
	
					173 lines
				
				4.1 KiB
			|   
											8 months ago
										 | <?php | ||
|  | 
 | ||
|  | include_once dirname(dirname(__FILE__))."/Core/OssException.php"; | ||
|  | include_once dirname(dirname(__FILE__))."/Http/ResponseCore.php"; | ||
|  | 
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * Class Result, The result class of The operation of the base class, different requests in dealing with the return of data have different logic, | ||
|  |  * The specific parsing logic postponed to subclass implementation | ||
|  |  * | ||
|  |  * @package OSS\Model | ||
|  |  */ | ||
|  | abstract class Result | ||
|  | { | ||
|  |     /** | ||
|  |      * Result constructor. | ||
|  |      * @param $response ResponseCore | ||
|  |      * @throws OssException | ||
|  |      */ | ||
|  |     public function __construct($response) | ||
|  |     { | ||
|  |         if ($response === null) { | ||
|  |             throw new OssException("raw response is null"); | ||
|  |         } | ||
|  |         $this->rawResponse = $response; | ||
|  |         $this->parseResponse(); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Get requestId | ||
|  |      * | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     public function getRequestId() | ||
|  |     { | ||
|  |         if (isset($this->rawResponse) && | ||
|  |             isset($this->rawResponse->header) && | ||
|  |             isset($this->rawResponse->header['x-oss-request-id']) | ||
|  |         ) { | ||
|  |             return $this->rawResponse->header['x-oss-request-id']; | ||
|  |         } else { | ||
|  |             return ''; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Get the returned data, different request returns the data format is different | ||
|  |      * | ||
|  |      * $return mixed | ||
|  |      */ | ||
|  |     public function getData() | ||
|  |     { | ||
|  |         return $this->parsedData; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Subclass implementation, different requests return data has different analytical logic, implemented by subclasses | ||
|  |      * | ||
|  |      * @return mixed | ||
|  |      */ | ||
|  |     abstract protected function parseDataFromResponse(); | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Whether the operation is successful | ||
|  |      * | ||
|  |      * @return mixed | ||
|  |      */ | ||
|  |     public function isOK() | ||
|  |     { | ||
|  |         return $this->isOk; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @throws OssException | ||
|  |      */ | ||
|  |     public function parseResponse() | ||
|  |     { | ||
|  |         $this->isOk = $this->isResponseOk(); | ||
|  |         if ($this->isOk) { | ||
|  |             $this->parsedData = $this->parseDataFromResponse(); | ||
|  |         } else { | ||
|  |             $httpStatus = strval($this->rawResponse->status); | ||
|  |             $requestId = strval($this->getRequestId()); | ||
|  |             $code = $this->retrieveErrorCode($this->rawResponse->body); | ||
|  |             $message = $this->retrieveErrorMessage($this->rawResponse->body); | ||
|  |             $body = $this->rawResponse->body; | ||
|  | 
 | ||
|  |             $details = array( | ||
|  |                 'status' => $httpStatus, | ||
|  |                 'request-id' => $requestId, | ||
|  |                 'code' => $code, | ||
|  |                 'message' => $message, | ||
|  |                 'body' => $body | ||
|  |             ); | ||
|  |             throw new OssException($details); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Try to get the error message from body | ||
|  |      * | ||
|  |      * @param $body | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     private function retrieveErrorMessage($body) | ||
|  |     { | ||
|  |         if (empty($body) || false === strpos($body, '<?xml')) { | ||
|  |             return ''; | ||
|  |         } | ||
|  |         $xml = simplexml_load_string($body); | ||
|  |         if (isset($xml->Message)) { | ||
|  |             return strval($xml->Message); | ||
|  |         } | ||
|  |         return ''; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Try to get the error Code from body | ||
|  |      * | ||
|  |      * @param $body | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     private function retrieveErrorCode($body) | ||
|  |     { | ||
|  |         if (empty($body) || false === strpos($body, '<?xml')) { | ||
|  |             return ''; | ||
|  |         } | ||
|  |         $xml = simplexml_load_string($body); | ||
|  |         if (isset($xml->Code)) { | ||
|  |             return strval($xml->Code); | ||
|  |         } | ||
|  |         return ''; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Judging from the return http status code, [200-299] that is OK | ||
|  |      * | ||
|  |      * @return bool | ||
|  |      */ | ||
|  |     protected function isResponseOk() | ||
|  |     { | ||
|  |         $status = $this->rawResponse->status; | ||
|  |         if ((int)(intval($status) / 100) == 2) { | ||
|  |             return true; | ||
|  |         } | ||
|  |         return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Return the original return data | ||
|  |      * | ||
|  |      * @return ResponseCore | ||
|  |      */ | ||
|  |     public function getRawResponse() | ||
|  |     { | ||
|  |         return $this->rawResponse; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Indicate whether the request is successful | ||
|  |      */ | ||
|  |     protected $isOk = false; | ||
|  |     /** | ||
|  |      * Data parsed by subclasses | ||
|  |      */ | ||
|  |     protected $parsedData = null; | ||
|  |     /** | ||
|  |      * Store the original Response returned by the auth function | ||
|  |      * | ||
|  |      * @var ResponseCore | ||
|  |      */ | ||
|  |     protected $rawResponse; | ||
|  | } |