Files
YeePay/lib/Http/YopHttpResponse.php
2024-04-01 09:54:43 +08:00

140 lines
2.7 KiB
PHP

<?php
namespace Yeepay\Yop\Sdk\Http;
use DateTime;
use Exception;
use GuzzleHttp\Psr7\Response;
use Psr\Http\Message\StreamInterface;
use Psr\Log\LoggerInterface;
use Yeepay\Yop\Sdk\Log\LogFactory;
use Yeepay\Yop\Sdk\Utils\DateUtils;
class YopHttpResponse
{
/**
* @var LoggerInterface
*/
private static $logger;
/**
* @var Response
*/
private $httpResponse;
/**
* @var StreamInterface
*/
private $stream;
/**
* @var string
*/
private $content;
public static function __init()
{
self::$logger = LogFactory::getLogger(self::class);
}
/**
* YopHttpResponse constructor.
* @param Response $response
*/
public function __construct(Response $response)
{
$this->httpResponse = $response;
$this->stream = $response->getBody();
}
/**
* @param string $name
* @return null | string
*/
public function getHeader($name)
{
$values = $this->httpResponse->getHeader($name);
if (empty($values)) {
return null;
} else {
return $values[0];
}
}
/**
* @param string $name
* @return float
*/
public function getHeaderAsLong($name)
{
$values = $this->httpResponse->getHeader($name);
if (empty($values)) {
return -1;
} else {
return floatval($values[0]);
}
}
/**
* @param $name
* @return DateTime|null
*/
public function getHeaderAsRFC822Date($name)
{
$values = $this->httpResponse->getHeader($name);
if (empty($values)) {
return null;
} else {
try {
return DateUtils::parseRfc822Date($values[0]);
} catch (Exception $e) {
self::$logger->warning('Invalid '.$name.':'.$values[0]);
}
}
}
/**
* @return StreamInterface
*/
public function getContent()
{
return $this->stream;
}
/**
* @return string
*/
public function readContent()
{
if (isset($this->content)) {
return $this->content;
}
$this->content = $this->stream->__toString();
$this->stream->close();
return $this->content;
}
/**
* @return int
*/
public function getStatusCode()
{
return $this->httpResponse->getStatusCode();
}
/**
* @return string
*/
public function getStatusText()
{
return implode(' ', [
$this->httpResponse->getProtocolVersion(), $this->httpResponse->getStatusCode(),
$this->httpResponse->getReasonPhrase(),
]);
}
}
YopHttpResponse::__init();