1
0
mirror of synced 2024-11-21 21:06:07 +03:00

fix for fileUpload & fileDownload

This commit is contained in:
Pavel 2020-02-11 10:57:17 +03:00
parent 5371a9750e
commit 9bbf277d92
6 changed files with 63 additions and 5 deletions

2
.gitignore vendored
View File

@ -2,6 +2,8 @@
/bin
composer.lock
composer.phar
coverage.xml
test-report.xml
phpunit.xml
.idea
.DS_Store

View File

@ -29,8 +29,13 @@ use RetailCrm\Http\Client;
*/
abstract class AbstractLoader
{
/** @var string|null */
protected $siteCode;
/** @var \RetailCrm\Http\Client */
protected $client;
/** @var string */
protected $crmUrl;
/**

View File

@ -75,7 +75,7 @@ class Client
*
* @return ApiResponse
*/
public function makeRequest(
public function makeRawRequest(
$path,
$method,
array $parameters = [],
@ -119,7 +119,7 @@ class Client
curl_setopt($curlHandler, CURLOPT_POST, true);
if ('/files/upload' == $path) {
curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters['file']);
curl_setopt($curlHandler, CURLOPT_POSTFIELDS, file_get_contents($parameters['file']));
} else {
curl_setopt($curlHandler, CURLOPT_POSTFIELDS, $parameters);
}
@ -143,4 +143,29 @@ class Client
return new ApiResponse($statusCode, $responseBody);
}
/**
* Make HTTP request and deserialize JSON body (throws exception otherwise)
*
* @param string $path request url
* @param string $method (default: 'GET')
* @param array $parameters (default: array())
* @param bool $fullPath (default: false)
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*
* @throws \InvalidArgumentException
* @throws CurlException
* @throws InvalidJsonException
*
* @return ApiResponse
*/
public function makeRequest(
$path,
$method,
array $parameters = [],
$fullPath = false
) {
return $this->makeRawRequest($path, $method, $parameters, $fullPath)->asJsonResponse();
}
}

View File

@ -150,7 +150,7 @@ trait Files
public function fileDownload($id)
{
/* @noinspection PhpUndefinedMethodInspection */
return $this->client->makeRequest(
return $this->client->makeRawRequest(
sprintf('/files/%s/download', $id),
"GET"
);

View File

@ -51,9 +51,17 @@ class ApiResponse implements \ArrayAccess
{
$this->statusCode = (int) $statusCode;
$this->rawResponse = $responseBody;
}
if (!empty($responseBody)) {
$response = json_decode($responseBody, true);
/**
* Deserialize JSON from raw response body
*
* @return $this
*/
public function asJsonResponse()
{
if (!empty($this->rawResponse)) {
$response = json_decode($this->rawResponse, true);
if (!$response && JSON_ERROR_NONE !== ($error = json_last_error())) {
throw new InvalidJsonException(
@ -64,6 +72,8 @@ class ApiResponse implements \ArrayAccess
$this->response = $response;
}
return $this;
}
/**

View File

@ -93,6 +93,22 @@ class ClientTest extends TestCase
$response = $client->makeRequest('/orders', Client::METHOD_GET);
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
static::assertNotEmpty($response->getResponseBody());
static::assertNotEmpty($response->getResponse());
static::assertEquals(200, $response->getStatusCode());
}
/**
* @group client
*/
public function testRequestSuccessNoDeserialization()
{
$client = static::getClient();
$response = $client->makeRawRequest('/orders', Client::METHOD_GET);
static::assertInstanceOf('RetailCrm\Response\ApiResponse', $response);
static::assertNotEmpty($response->getResponseBody());
static::assertEmpty($response->getResponse());
static::assertEquals(200, $response->getStatusCode());
}
}