vendor/mailjet/mailjet-apiv3-php/src/Mailjet/Request.php line 243

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * Copyright (C) 2013 Mailgun
  5.  *
  6.  * This software may be modified and distributed under the terms
  7.  * of the MIT license. See the LICENSE file for details.
  8.  */
  9. namespace Mailjet;
  10. use GuzzleHttp\Client as GuzzleClient;
  11. use GuzzleHttp\ClientTrait as GuzzleClientTrait;
  12. use GuzzleHttp\Exception\ClientException;
  13. use GuzzleHttp\Exception\ServerException;
  14. use GuzzleHttp\Exception\GuzzleException;
  15. use GuzzleHttp\Promise\PromiseInterface;
  16. use Psr\Http\Message\RequestInterface;
  17. use Psr\Http\Message\ResponseInterface;
  18. use Psr\Http\Message\UriInterface;
  19. class Request
  20. {
  21.     use GuzzleClientTrait;
  22.     
  23.     /**
  24.      * @var string
  25.      */
  26.     private $method;
  27.     /**
  28.      * @var string
  29.      */
  30.     private $url;
  31.     /**
  32.      * @var array
  33.      */
  34.     private $filters;
  35.     /**
  36.      * @var array
  37.      */
  38.     private $body;
  39.     /**
  40.      * @var array
  41.      */
  42.     private $auth;
  43.     /**
  44.      * @var string
  45.      */
  46.     private $type;
  47.     /**
  48.      * @var array
  49.      */
  50.     private $requestOptions = [];
  51.     /**
  52.      * @var GuzzleClient
  53.      */
  54.     private $guzzleClient;
  55.     /**
  56.      * Build a new Http request.
  57.      *
  58.      * @param array $auth [apikey, apisecret]
  59.      * @param string $method http method
  60.      * @param string $url call url
  61.      * @param array $filters Mailjet resource filters
  62.      * @param mixed $body Mailjet resource body
  63.      * @param string $type Request Content-type
  64.      * @param array $requestOptions
  65.      */
  66.     public function __construct(
  67.         array $auth,
  68.         string $method,
  69.         string $url,
  70.         array $filters,
  71.         $body,
  72.         string $type,
  73.         array $requestOptions = []
  74.     ) {
  75.         $this->type $type;
  76.         $this->auth $auth;
  77.         $this->method $method;
  78.         $this->url $url;
  79.         $this->filters $filters;
  80.         $this->body $body;
  81.         $this->requestOptions $requestOptions;
  82.         $this->guzzleClient = new GuzzleClient(
  83.             ['defaults' => [
  84.                 'headers' => [
  85.                     'user-agent' => Config::USER_AGENT PHP_VERSION.'/' Client::WRAPPER_VERSION,
  86.                     ],
  87.                 ]
  88.             ]
  89.         );
  90.     }
  91.     /**
  92.      * Trigger the actual call
  93.      * TODO: DATA API.
  94.      *
  95.      * @param $call
  96.      *
  97.      * @return Response the call response
  98.      */
  99.     public function call($call)
  100.     {
  101.         $payload = [
  102.             'query' => $this->filters,
  103.             ('application/json' === $this->type 'json' 'body') => $this->body,
  104.         ];
  105.         $authArgsCount \count($this->auth);
  106.         $headers = [
  107.             'content-type' => $this->type,
  108.         ];
  109.         if ($authArgsCount 1) {
  110.             $payload['auth'] = $this->auth;
  111.         } else {
  112.             $headers['Authorization'] = 'Bearer '.$this->auth[0];
  113.         }
  114.         $payload['headers'] = $headers;
  115.         if ((!empty($this->requestOptions)) && (\is_array($this->requestOptions))) {
  116.             $payload array_merge_recursive($payload$this->requestOptions);
  117.         }
  118.         $response null;
  119.         if ($call) {
  120.             try {
  121.                 $response call_user_func([$thisstrtolower($this->method)], $this->url$payload);
  122.             } catch (ClientException $e) {
  123.                 $response $e->getResponse();
  124.             } catch (ServerException $e) {
  125.                 $response $e->getResponse();
  126.             }
  127.         }
  128.         return new Response($this$response);
  129.     }
  130.     /**
  131.      * Filters getters.
  132.      *
  133.      * @return array Request filters
  134.      */
  135.     public function getFilters(): array
  136.     {
  137.         return $this->filters;
  138.     }
  139.     /**
  140.      * Http method getter.
  141.      *
  142.      * @return string Request method
  143.      */
  144.     public function getMethod(): string
  145.     {
  146.         return $this->method;
  147.     }
  148.     /**
  149.      * Call Url getter.
  150.      *
  151.      * @return string Request Url
  152.      */
  153.     public function getUrl(): string
  154.     {
  155.         return $this->url;
  156.     }
  157.     /**
  158.      * Request body getter.
  159.      *
  160.      * @return array request body
  161.      */
  162.     public function getBody(): array
  163.     {
  164.         return $this->body;
  165.     }
  166.     /**
  167.      * Auth getter. to discuss.
  168.      *
  169.      * @return array Request auth
  170.      */
  171.     public function getAuth(): array
  172.     {
  173.         return $this->auth;
  174.     }
  175.     /**
  176.      * @param RequestInterface $request Request to send
  177.      * @param array            $options Request options to apply to the given
  178.      *                                  request and to the transfer.
  179.      *
  180.      * @throws GuzzleException
  181.      */
  182.     public function send(RequestInterface $request, array $options = []): ResponseInterface
  183.     {
  184.         return $this->guzzleClient->send($request$options);
  185.     }
  186.     /**
  187.      * @param RequestInterface $request
  188.      *
  189.      * @return ResponseInterface
  190.      *
  191.      * @throws \Psr\Http\Client\ClientExceptionInterface
  192.      */
  193.     public function sendRequest(RequestInterface $request): ResponseInterface
  194.     {
  195.         return $this->guzzleClient->sendRequest($request);
  196.     }
  197.     /**
  198.      * @param RequestInterface $request Request to send
  199.      * @param array            $options Request options to apply to the given
  200.      *                                  request and to the transfer.
  201.      */
  202.     public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface
  203.     {
  204.         return $this->guzzleClient->sendAsync($request,$options);
  205.     }
  206.     /**
  207.      * @param string              $method  HTTP method.
  208.      * @param string|UriInterface $uri     URI object or string.
  209.      * @param array               $options Request options to apply.
  210.      *
  211.      * @throws GuzzleException
  212.      */
  213.     public function request(string $method$uri, array $options = []): ResponseInterface
  214.     {
  215.         return $this->guzzleClient->request($method$uri$options);
  216.     }
  217.     /**
  218.      * @param string              $method  HTTP method
  219.      * @param string|UriInterface $uri     URI object or string.
  220.      * @param array               $options Request options to apply.
  221.      */
  222.     public function requestAsync(string $method$uri, array $options = []): PromiseInterface
  223.     {
  224.         return $this->guzzleClient->requestAsync($method$uri$options);
  225.     }
  226. }