diff --git a/composer.json b/composer.json index d56c23c..f0289ba 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "payvision/payvision-sdk-php", "description": "Payvision PHP SDK", "type": "library", - "version": "8.0.0", + "version": "8.1.0", "license": "MIT", "require": { "php": "~7.1.3||~7.2.5||~7.3.0||~7.4.0", diff --git a/src/Infrastructure/ApiConnection.php b/src/Infrastructure/ApiConnection.php index a56d53d..f07cf91 100644 --- a/src/Infrastructure/ApiConnection.php +++ b/src/Infrastructure/ApiConnection.php @@ -45,6 +45,11 @@ class ApiConnection implements Connection */ private $lastJsonRequest; + /** + * @var array + */ + private $globalRequestHeaders = []; + /** * ApiConnection constructor. * @@ -79,6 +84,7 @@ public function __construct( */ public function execute(Request $request, array $requestHeaders = []) { + $requestHeaders = \array_merge($this->globalRequestHeaders, $requestHeaders); $this->validateResponseClasses($request); $jsonResponse = $this->doRequest($request, $requestHeaders); return $this->handleResponse($jsonResponse, $request); @@ -86,14 +92,16 @@ public function execute(Request $request, array $requestHeaders = []) /** * @param Request $request + * @param array $requestHeaders * @return array * @throws ApiException * @throws BuilderException * @throws ErrorResponse */ - public function executeAndReturnArray(Request $request): array + public function executeAndReturnArray(Request $request, array $requestHeaders = []): array { - $jsonResponse = $this->doRequest($request); + $requestHeaders = \array_merge($this->globalRequestHeaders, $requestHeaders); + $jsonResponse = $this->doRequest($request, $requestHeaders); $items = []; foreach ($jsonResponse as $item) { @@ -103,6 +111,35 @@ public function executeAndReturnArray(Request $request): array return $items; } + /** + * @param array $globalRequestHeaders + * @return ApiConnection + */ + public function setGlobalRequestHeaders(array $globalRequestHeaders = []): ApiConnection + { + $this->globalRequestHeaders = $globalRequestHeaders; + return $this; + } + + /** + * @param string $key + * @param string $value + * @return ApiConnection + */ + public function addGlobalRequestHeader(string $key, string $value): ApiConnection + { + $this->globalRequestHeaders[$key] = $value; + return $this; + } + + /** + * @return array + */ + public function getGlobalRequestHeaders(): array + { + return $this->globalRequestHeaders; + } + /** * @param Request $request * @param RequestHeaderCollection $requestHeaderCollection diff --git a/src/Infrastructure/RequestHeaderCollection.php b/src/Infrastructure/RequestHeaderCollection.php index 957d9bf..da4c599 100644 --- a/src/Infrastructure/RequestHeaderCollection.php +++ b/src/Infrastructure/RequestHeaderCollection.php @@ -2,6 +2,11 @@ declare(strict_types=1); +/** + * @copyright Copyright (c) 2018-2021 Payvision B.V. (https://www.payvision.com/) + * @license see LICENCE.TXT + */ + namespace Payvision\SDK\Infrastructure; use ArrayIterator; @@ -11,7 +16,9 @@ class RequestHeaderCollection implements IteratorAggregate, Countable { - const HEADER_EXECUTION_MODE = 'X-AH-ExecutionMode'; + public const HEADER_EXECUTION_MODE = 'X-AH-ExecutionMode'; + public const HEADER_PLUGIN_NAME = 'X-AH-PluginName'; + public const HEADER_PLUGIN_DETAILS = 'X-AH-PluginDetails'; /** * @var string[],array diff --git a/tests/Test/Unit/Infrastructure/ApiConnectionTest.php b/tests/Test/Unit/Infrastructure/ApiConnectionTest.php index 34e1080..b59a15d 100644 --- a/tests/Test/Unit/Infrastructure/ApiConnectionTest.php +++ b/tests/Test/Unit/Infrastructure/ApiConnectionTest.php @@ -23,6 +23,7 @@ use Payvision\SDK\Exception\ApiException; use Payvision\SDK\Exception\BuilderException; use Payvision\SDK\Infrastructure\ApiConnection; +use Payvision\SDK\Infrastructure\RequestHeaderCollection; use Payvision\SDK\Test\Unit\Application\Response\Fake as FakeResponse; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -354,6 +355,18 @@ public function testExceptionOnMissingRequiredField(): void $this->subject->execute($request); } + public function testGlobalRequestHeaders(): void + { + $this->subject->setGlobalRequestHeaders([ + RequestHeaderCollection::HEADER_PLUGIN_NAME => 'PHP SDK', + RequestHeaderCollection::HEADER_PLUGIN_DETAILS => 'Version 8.1.0', + ]); + self::assertCount(2, $this->subject->getGlobalRequestHeaders()); + + $this->subject->addGlobalRequestHeader(RequestHeaderCollection::HEADER_EXECUTION_MODE, 'true'); + self::assertCount(3, $this->subject->getGlobalRequestHeaders()); + } + private function createApiRequestObject( string $method = Request::METHOD_POST, array $responseObjectTypes = [200 => FakeResponse::class] diff --git a/tests/Test/Unit/Infrastructure/RequestHeaderCollectionTest.php b/tests/Test/Unit/Infrastructure/RequestHeaderCollectionTest.php index 3fb7dac..23ee6ee 100644 --- a/tests/Test/Unit/Infrastructure/RequestHeaderCollectionTest.php +++ b/tests/Test/Unit/Infrastructure/RequestHeaderCollectionTest.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * @copyright Copyright (c) 2018-2020 Payvision B.V. (https://www.payvision.com/) + * @copyright Copyright (c) 2018-2021 Payvision B.V. (https://www.payvision.com/) * @license see LICENCE.TXT */ @@ -19,16 +19,25 @@ public function testAddRequestHeaderCollectionSuccessfully(): void $requestHeaders = new RequestHeaderCollection(); self::assertEquals(0, $requestHeaders->count()); - $requestHeaders->add(RequestHeaderCollection::HEADER_EXECUTION_MODE, 'test'); - self::assertEquals(1, $requestHeaders->count()); + $testHeaders = [ + RequestHeaderCollection::HEADER_EXECUTION_MODE => 'test', + RequestHeaderCollection::HEADER_PLUGIN_NAME => 'PHP SDK', + RequestHeaderCollection::HEADER_PLUGIN_DETAILS => 'Version 8.1.0', + ]; + foreach ($testHeaders as $header => $value) { + $requestHeaders->add($header, $value); + } + + self::assertEquals(\count($testHeaders), $requestHeaders->count()); foreach ($requestHeaders as $key => $value) { - self::assertEquals(RequestHeaderCollection::HEADER_EXECUTION_MODE, $key); - self::assertEquals('test', $value); + self::assertEquals($testHeaders[$key], $value); } $headers = $requestHeaders->getHeaders(); - self::assertArrayHasKey(RequestHeaderCollection::HEADER_EXECUTION_MODE, $headers); - self::assertEquals('test', $headers[RequestHeaderCollection::HEADER_EXECUTION_MODE]); + foreach ($testHeaders as $key => $value) { + self::assertArrayHasKey($key, $headers); + self::assertEquals($value, $headers[$key]); + } } }