viagogo/gogokit.php

View on GitHub
src/core/HttpClient.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Viagogo\Core;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

/**
 *
 */
class HttpClient {
    /**
     * @var array The headers to be sent with the request
     */
    protected $requestHeaders = array();
    
    /**
     * @var array The headers received from the response
     */
    protected $responseHeaders = array();

    /**
     * @var int The HTTP status code returned from the server
     */
    protected $responseHttpStatusCode = 0;

    /**
     * @var Client The Guzzle client
     */
    protected $guzzleClient;
    /**
     * @param Client|null The Guzzle client
     */
    public function __construct($guzzleClient) {
        $this->guzzleClient = $guzzleClient;
    }

    /**
     * The headers we want to send with the request
     *
     * @param string $key
     * @param string $value
     */
    public function setRequestHeader($key, $value) {
        $this->requestHeaders[$key] = $value;
    }

    /**
     * The headers returned in the response
     *
     * @return array
     */
    public function getResponseHeaders() {
        return $this->responseHeaders;
    }

    /**
     * The HTTP status response code
     *
     * @return int
     */
    public function getResponseHttpStatusCode() {
        return $this->responseHttpStatusCode;
    }

    /**
     * Sends a request to the server
     *
     * @param string $url The endpoint to send the request to
     * @param string $method The request method
     * @param array  $bodyParameters The key value pairs to be sent in the body
     *
     * @return object - response from the server
     *
     * @throws \Viagogo\Exceptions\ViagogoException
     */
    public function send($url, $method = 'GET', $queryParameters = array(), $bodyParameters) {
        $options = array();
        if ($bodyParameters) {
            $options['body'] = $bodyParameters;
        }

        if ($queryParameters) {
            $options['query'] = $queryParameters;
        }

        $request = $this->guzzleClient->createRequest($method, $url, $options);
        $request->setHeader('Content-Type', 'application/json');

        foreach ($this->requestHeaders as $k => $v) {
            $request->setHeader($k, $v);
        }

        try
        {
            $response = $this->guzzleClient->send($request);
        } catch (RequestException $e) {
            throw ErrorHandler::handleError($e);
        }

        $this->responseHttpStatusCode = $response->getStatusCode();
        $this->responseHeaders = $response->getHeaders();

        return json_decode($response->getBody());
    }

    public function getBytes($url, $queryParameters = array(), $bodyParameters) {
        $options = array();
        if ($bodyParameters) {
            $options['body'] = $bodyParameters;
        }

        if ($queryParameters) {
            $options['query'] = $queryParameters;
        }

        $request = $this->guzzleClient->createRequest("get", $url, $options);
        $request->setHeader('Content-Type', 'application/multipart/form-data');
        //$request->setHeader('Accept', 'multipart/form-data');
        foreach ($this->requestHeaders as $k => $v) {
            $request->setHeader($k, $v);
        }

        
        try
        {
            $response = $this->guzzleClient->send($request);
        } catch (RequestException $e) {
            echo ($e);
            throw ErrorHandler::handleError($e);
        }

        $this->responseHttpStatusCode = $response->getStatusCode();
        $this->responseHeaders = $response->getHeaders();

        return $response->getBody()->getContents();
    }


    public function sendFile($url, $fileContent, $fileName) {

        $file = new \GuzzleHttp\Post\PostFile($fileName, $fileContent);
        $multipart = new \GuzzleHttp\Post\MultipartBody([], [$file]);

        $options = array();
        $options['body'] = $multipart;

        $request = $this->guzzleClient->createRequest('POST', $url, $options);
        $request->setHeader("Content-Type", "multipart/form-data; boundary=". $multipart->getBoundary());
        
        foreach ($this->requestHeaders as $k => $v) {
            $request->setHeader($k, $v);
        }

        try
        {
            $response = $this->guzzleClient->send($request);
        } catch (RequestException $e) {
            throw ErrorHandler::handleError($e);
        }

        $this->responseHttpStatusCode = $response->getStatusCode();
        $this->responseHeaders = $response->getHeaders();

        return json_decode($response->getBody());
    }
}