* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace EasyWeChat\Kernel\Http; use EasyWeChat\Kernel\Support\Collection; use EasyWeChat\Kernel\Support\XML; use GuzzleHttp\Psr7\Response as GuzzleResponse; use Psr\Http\Message\ResponseInterface; /** * Class Response. * * @author overtrue */ class Response extends GuzzleResponse { /** * @return string */ public function getBodyContents() { $this->getBody()->rewind(); $contents = $this->getBody()->getContents(); $this->getBody()->rewind(); return $contents; } /** * @return \EasyWeChat\Kernel\Http\Response */ public static function buildFromPsrResponse(ResponseInterface $response) { return new static( $response->getStatusCode(), $response->getHeaders(), $response->getBody(), $response->getProtocolVersion(), $response->getReasonPhrase() ); } /** * Build to json. * * @return string */ public function toJson() { return json_encode($this->toArray()); } /** * Build to array. * * @return array */ public function toArray() { $content = $this->removeControlCharacters($this->getBodyContents()); if (false !== stripos($this->getHeaderLine('Content-Type'), 'xml') || 0 === stripos($content, 'toArray()); } /** * @return object */ public function toObject() { return json_decode($this->toJson()); } /** * @return bool|string */ public function __toString() { return $this->getBodyContents(); } /** * @return string */ protected function removeControlCharacters(string $content) { return \preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', $content); } }