diff --git a/composer.json b/composer.json
index a1d5007..b9b5342 100644
--- a/composer.json
+++ b/composer.json
@@ -2,10 +2,10 @@
"name": "payvision/payvision-sdk-php",
"description": "Payvision PHP SDK",
"type": "library",
- "version": "5.1.2",
+ "version": "6.0.0",
"license": "MIT",
"require": {
- "php": "^7.2.5|^7.3",
+ "php": "~7.1.3||~7.2.5||~7.3.0||~7.4.0",
"ext-simplexml": "*",
"ext-json": "*",
"ext-curl": "*",
@@ -23,9 +23,9 @@
}
},
"require-dev": {
- "phpunit/phpunit": "^8.5",
+ "phpunit/phpunit": "^7.5",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
- "object-calisthenics/phpcs-calisthenics-rules": "^3.8",
+ "object-calisthenics/phpcs-calisthenics-rules": "^3.0",
"phpcompatibility/php-compatibility": "^9.3",
"slevomat/coding-standard": "^6.3",
"squizlabs/php_codesniffer": "^3.5"
diff --git a/phpcs.xml b/phpcs.xml
index ad8aa04..2f2e0a4 100644
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -30,7 +30,7 @@
-
+
diff --git a/src/Infrastructure/ApiConnection.php b/src/Infrastructure/ApiConnection.php
index e041ce1..a56d53d 100644
--- a/src/Infrastructure/ApiConnection.php
+++ b/src/Infrastructure/ApiConnection.php
@@ -17,6 +17,7 @@
use Payvision\SDK\Exception\Api\ErrorResponse;
use Payvision\SDK\Exception\ApiException;
use Payvision\SDK\Exception\BuilderException;
+use Psr\Http\Message\ResponseInterface;
use ReflectionException;
class ApiConnection implements Connection
@@ -107,6 +108,7 @@ public function executeAndReturnArray(Request $request): array
* @param RequestHeaderCollection $requestHeaderCollection
* @return array
* @throws ApiException
+ * @throws ErrorResponse
*/
private function get(Request $request, RequestHeaderCollection $requestHeaderCollection): array
{
@@ -116,19 +118,7 @@ private function get(Request $request, RequestHeaderCollection $requestHeaderCol
);
$this->lastJsonRequest = $request->getPathParams();
- $this->lastStatusCode = $guzzleResponse->getStatusCode();
- $contents = $guzzleResponse->getBody()->getContents();
- $json = \json_decode($contents, true);
-
- if (!\is_array($json)) {
- $this->logDebugData($this->lastJsonRequest, ['_raw_response' => $contents], $requestHeaderCollection);
- throw new ApiException(
- \sprintf('Response is not JSON: %1$s', $contents),
- ApiException::INVALID_RESPONSE
- );
- }
-
- return $json;
+ return $this->parseJSONResponse($guzzleResponse, $requestHeaderCollection);
}
/**
@@ -136,6 +126,7 @@ private function get(Request $request, RequestHeaderCollection $requestHeaderCol
* @param RequestHeaderCollection $requestHeaderCollection
* @return array
* @throws ApiException
+ * @throws ErrorResponse
*/
private function post(Request $request, RequestHeaderCollection $requestHeaderCollection): array
{
@@ -147,12 +138,32 @@ private function post(Request $request, RequestHeaderCollection $requestHeaderCo
);
$this->lastJsonRequest = $jsonRequest;
+ return $this->parseJSONResponse($guzzleResponse, $requestHeaderCollection);
+ }
+
+ /**
+ * @throws ApiException
+ * @throws ErrorResponse
+ */
+ private function parseJSONResponse(
+ ResponseInterface $guzzleResponse,
+ RequestHeaderCollection $requestHeaderCollection
+ ): array {
$this->lastStatusCode = $guzzleResponse->getStatusCode();
$contents = $guzzleResponse->getBody()->getContents();
$json = \json_decode($contents, true);
if (!\is_array($json)) {
$this->logDebugData($this->lastJsonRequest, ['_raw_response' => $contents], $requestHeaderCollection);
+
+ if ($this->lastStatusCode >= 400) {
+ throw new ErrorResponse(
+ $guzzleResponse,
+ 'Invalid response code received',
+ ErrorResponse::INVALID_RESPONSE
+ );
+ }
+
throw new ApiException(
\sprintf('Response is not JSON: %1$s', $contents),
ApiException::INVALID_RESPONSE
@@ -250,6 +261,7 @@ private function handleResponse(
* @param Request $request
* @param array $requestHeaders
* @return array
+ * @throws ErrorResponse
* @throws ApiException
*/
private function doRequest(Request $request, array $requestHeaders = []): array