73 lines
2.1 KiB
PHP
73 lines
2.1 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Omnipay\Common\Http;
|
||
|
|
|
||
|
|
use Http\Client\HttpClient;
|
||
|
|
use Http\Discovery\HttpClientDiscovery;
|
||
|
|
use Http\Discovery\MessageFactoryDiscovery;
|
||
|
|
use Http\Message\RequestFactory;
|
||
|
|
use Omnipay\Common\Http\Exception\NetworkException;
|
||
|
|
use Omnipay\Common\Http\Exception\RequestException;
|
||
|
|
use Psr\Http\Message\RequestInterface;
|
||
|
|
use Psr\Http\Message\ResponseInterface;
|
||
|
|
use Psr\Http\Message\StreamInterface;
|
||
|
|
|
||
|
|
class Client implements ClientInterface
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* The Http Client which implements `public function sendRequest(RequestInterface $request)`
|
||
|
|
* Note: Will be changed to PSR-18 when released
|
||
|
|
*
|
||
|
|
* @var HttpClient
|
||
|
|
*/
|
||
|
|
private $httpClient;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var RequestFactory
|
||
|
|
*/
|
||
|
|
private $requestFactory;
|
||
|
|
|
||
|
|
public function __construct($httpClient = null, ?RequestFactory $requestFactory = null)
|
||
|
|
{
|
||
|
|
$this->httpClient = $httpClient ?: HttpClientDiscovery::find();
|
||
|
|
$this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find();
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param $method
|
||
|
|
* @param $uri
|
||
|
|
* @param array $headers
|
||
|
|
* @param string|array|resource|StreamInterface|null $body
|
||
|
|
* @param string $protocolVersion
|
||
|
|
* @return ResponseInterface
|
||
|
|
* @throws \Http\Client\Exception
|
||
|
|
*/
|
||
|
|
public function request(
|
||
|
|
$method,
|
||
|
|
$uri,
|
||
|
|
array $headers = [],
|
||
|
|
$body = null,
|
||
|
|
$protocolVersion = '1.1'
|
||
|
|
) {
|
||
|
|
$request = $this->requestFactory->createRequest($method, $uri, $headers, $body, $protocolVersion);
|
||
|
|
|
||
|
|
return $this->sendRequest($request);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param RequestInterface $request
|
||
|
|
* @return ResponseInterface
|
||
|
|
* @throws \Http\Client\Exception
|
||
|
|
*/
|
||
|
|
private function sendRequest(RequestInterface $request)
|
||
|
|
{
|
||
|
|
try {
|
||
|
|
return $this->httpClient->sendRequest($request);
|
||
|
|
} catch (\Http\Client\Exception\NetworkException $networkException) {
|
||
|
|
throw new NetworkException($networkException->getMessage(), $request, $networkException);
|
||
|
|
} catch (\Exception $exception) {
|
||
|
|
throw new RequestException($exception->getMessage(), $request, $exception);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|