| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | <?phpnamespace OSS\Result;use OSS\Core\OssException;use OSS\Http\ResponseCore;/** * 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;}
 |