ErrorResponse & client now can send request
This commit is contained in:
parent
fd2241dbe4
commit
21ff82c1b8
@ -43,7 +43,7 @@
|
||||
"post-install-cmd": "cghooks add --ignore-lock",
|
||||
"post-update-cmd": "cghooks update",
|
||||
"phpunit": "./vendor/bin/phpunit -c phpunit.xml.dist",
|
||||
"phpmd": "./vendor/bin/phpmd src text controversial,design,./phpmd.xml",
|
||||
"phpmd": "./vendor/bin/phpmd src text controversial,./phpmd.xml",
|
||||
"phpcs": "./vendor/bin/phpcs -p src --runtime-set testVersion 7.3",
|
||||
"lint": "composer run-script phpcs && composer run-script phpmd",
|
||||
"ci": "composer run-script lint && composer run-script phpunit"
|
||||
@ -51,7 +51,6 @@
|
||||
"extra": {
|
||||
"hooks": {
|
||||
"pre-commit": [
|
||||
"echo => Running code quality tools...",
|
||||
"composer run-script lint"
|
||||
]
|
||||
}
|
||||
|
@ -19,11 +19,19 @@
|
||||
<rule ref="rulesets/codesize.xml">
|
||||
<exclude name="TooManyPublicMethods" />
|
||||
</rule>
|
||||
<rule ref="rulesets/design.xml">
|
||||
<exclude name="CouplingBetweenObjects" />
|
||||
</rule>
|
||||
<rule ref="rulesets/codesize.xml/TooManyPublicMethods">
|
||||
<properties>
|
||||
<property name="maxmethods" value="15" />
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="rulesets/design.xml/CouplingBetweenObjects">
|
||||
<properties>
|
||||
<property name="maximum" value="15" />
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="rulesets/naming.xml/ShortVariable">
|
||||
<properties>
|
||||
<property name="minimum" value="2" />
|
||||
|
70
src/Component/Exception/TopApiException.php
Normal file
70
src/Component/Exception/TopApiException.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.3
|
||||
*
|
||||
* @category TopApiException
|
||||
* @package RetailCrm\Component\Exception
|
||||
* @author RetailCRM <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see http://help.retailcrm.ru
|
||||
*/
|
||||
namespace RetailCrm\Component\Exception;
|
||||
|
||||
use Exception;
|
||||
use RetailCrm\Model\Response\Body\ErrorResponseBody;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* Class TopApiException
|
||||
*
|
||||
* @category TopApiException
|
||||
* @package RetailCrm\Component\Exception
|
||||
* @author RetailDriver LLC <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see https://help.retailcrm.ru
|
||||
*/
|
||||
class TopApiException extends Exception
|
||||
{
|
||||
/**
|
||||
* @var string $subCode
|
||||
*/
|
||||
private $subCode;
|
||||
|
||||
/**
|
||||
* @var string $requestId
|
||||
*/
|
||||
private $requestId;
|
||||
|
||||
/**
|
||||
* TopApiException constructor.
|
||||
*
|
||||
* @param \RetailCrm\Model\Response\Body\ErrorResponseBody $responseBody
|
||||
* @param \Throwable|null $previous
|
||||
*/
|
||||
public function __construct(ErrorResponseBody $responseBody, Throwable $previous = null)
|
||||
{
|
||||
parent::__construct($responseBody->msg, $responseBody->code, $previous);
|
||||
|
||||
$this->subCode = $responseBody->subCode;
|
||||
$this->requestId = $responseBody->requestId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSubCode(): string
|
||||
{
|
||||
return $this->subCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getRequestId(): string
|
||||
{
|
||||
return $this->requestId;
|
||||
}
|
||||
}
|
29
src/Component/Exception/TopClientException.php
Normal file
29
src/Component/Exception/TopClientException.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.3
|
||||
*
|
||||
* @category TopClientException
|
||||
* @package RetailCrm\Component\Exception
|
||||
* @author RetailCRM <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see http://help.retailcrm.ru
|
||||
*/
|
||||
namespace RetailCrm\Component\Exception;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class TopClientException
|
||||
*
|
||||
* @category TopClientException
|
||||
* @package RetailCrm\Component\Exception
|
||||
* @author RetailDriver LLC <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see https://help.retailcrm.ru
|
||||
*/
|
||||
class TopClientException extends Exception
|
||||
{
|
||||
}
|
@ -12,6 +12,8 @@
|
||||
*/
|
||||
namespace RetailCrm\Model\Request;
|
||||
|
||||
use RetailCrm\Model\Response\BaseResponse;
|
||||
|
||||
/**
|
||||
* Class HttpDnsGetRequest
|
||||
*
|
||||
@ -42,6 +44,6 @@ class HttpDnsGetRequest extends BaseRequest
|
||||
public function getExpectedResponse(): string
|
||||
{
|
||||
// TODO: Implement getExpectedResponse() method.
|
||||
return '';
|
||||
return BaseResponse::class;
|
||||
}
|
||||
}
|
||||
|
36
src/Model/Response/BaseResponse.php
Normal file
36
src/Model/Response/BaseResponse.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.3
|
||||
*
|
||||
* @category BaseResponse
|
||||
* @package RetailCrm\Model\Response
|
||||
* @author RetailCRM <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see http://help.retailcrm.ru
|
||||
*/
|
||||
namespace RetailCrm\Model\Response;
|
||||
|
||||
use JMS\Serializer\Annotation as JMS;
|
||||
|
||||
/**
|
||||
* Class BaseResponse
|
||||
*
|
||||
* @category BaseResponse
|
||||
* @package RetailCrm\Model\Response
|
||||
* @author RetailDriver LLC <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see https://help.retailcrm.ru
|
||||
*/
|
||||
class BaseResponse
|
||||
{
|
||||
/**
|
||||
* @var \RetailCrm\Model\Response\Body\ErrorResponseBody
|
||||
*
|
||||
* @JMS\Type("RetailCrm\Model\Response\Body\ErrorResponseBody")
|
||||
* @JMS\SerializedName("error_response")
|
||||
*/
|
||||
public $errorResponse;
|
||||
}
|
60
src/Model/Response/Body/ErrorResponseBody.php
Normal file
60
src/Model/Response/Body/ErrorResponseBody.php
Normal file
@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.3
|
||||
*
|
||||
* @category ErrorResponseBody
|
||||
* @package RetailCrm\Model\Response\Body
|
||||
* @author RetailCRM <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see http://help.retailcrm.ru
|
||||
*/
|
||||
namespace RetailCrm\Model\Response\Body;
|
||||
|
||||
use JMS\Serializer\Annotation as JMS;
|
||||
|
||||
/**
|
||||
* Class ErrorResponseBody
|
||||
*
|
||||
* @category ErrorResponseBody
|
||||
* @package RetailCrm\Model\Response\Body
|
||||
* @author RetailDriver LLC <integration@retailcrm.ru>
|
||||
* @license MIT
|
||||
* @link http://retailcrm.ru
|
||||
* @see https://help.retailcrm.ru
|
||||
*/
|
||||
class ErrorResponseBody
|
||||
{
|
||||
/**
|
||||
* @var int $code
|
||||
*
|
||||
* @JMS\Type("int")
|
||||
* @JMS\SerializedName("code")
|
||||
*/
|
||||
public $code;
|
||||
|
||||
/**
|
||||
* @var string $msg
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
* @JMS\SerializedName("msg")
|
||||
*/
|
||||
public $msg;
|
||||
|
||||
/**
|
||||
* @var string $subCode
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
* @JMS\SerializedName("sub_code")
|
||||
*/
|
||||
public $subCode;
|
||||
|
||||
/**
|
||||
* @var string $requestId
|
||||
*
|
||||
* @JMS\Type("string")
|
||||
* @JMS\SerializedName("request_id")
|
||||
*/
|
||||
public $requestId;
|
||||
}
|
@ -14,11 +14,14 @@ namespace RetailCrm\TopClient;
|
||||
|
||||
use JMS\Serializer\SerializerInterface;
|
||||
use Psr\Http\Client\ClientInterface;
|
||||
use RetailCrm\Component\Exception\TopApiException;
|
||||
use RetailCrm\Component\Exception\TopClientException;
|
||||
use RetailCrm\Component\ServiceLocator;
|
||||
use RetailCrm\Interfaces\AppDataInterface;
|
||||
use RetailCrm\Interfaces\AuthenticatorInterface;
|
||||
use RetailCrm\Interfaces\RequestFactoryInterface;
|
||||
use RetailCrm\Model\Request\BaseRequest;
|
||||
use RetailCrm\Model\Response\BaseResponse;
|
||||
use RetailCrm\Traits\ValidatorAwareTrait;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
@ -138,17 +141,32 @@ class Client
|
||||
/**
|
||||
* @param \RetailCrm\Model\Request\BaseRequest $request
|
||||
*
|
||||
* @return void
|
||||
* @return \RetailCrm\Model\Response\BaseResponse
|
||||
* @throws \Psr\Http\Client\ClientExceptionInterface
|
||||
* @throws \RetailCrm\Component\Exception\ValidationException
|
||||
* @throws \RetailCrm\Component\Exception\FactoryException
|
||||
*
|
||||
* @todo Implement this method and remove tag below.
|
||||
* @SuppressWarnings(PHPMD)
|
||||
* @throws \RetailCrm\Component\Exception\TopClientException
|
||||
* @throws \RetailCrm\Component\Exception\TopApiException
|
||||
*/
|
||||
public function sendRequest(BaseRequest $request)
|
||||
{
|
||||
$httpRequest = $this->requestFactory->fromModel($request, $this->appData, $this->authenticator);
|
||||
$response = $this->httpClient->sendRequest($httpRequest);
|
||||
$httpResponse = $this->httpClient->sendRequest($httpRequest);
|
||||
/** @var BaseResponse $response */
|
||||
$response = $this->serializer->deserialize(
|
||||
$httpResponse->getBody()->getContents(),
|
||||
$request->getExpectedResponse(),
|
||||
$request->format
|
||||
);
|
||||
|
||||
if (!($response instanceof BaseResponse) && !is_subclass_of($response, BaseResponse::class)) {
|
||||
throw new TopClientException(sprintf('Invalid response class: %s', get_class($response)));
|
||||
}
|
||||
|
||||
if (null !== $response->errorResponse) {
|
||||
throw new TopApiException($response->errorResponse);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ class ClientTest extends TestCase
|
||||
{
|
||||
public function testClientRequest()
|
||||
{
|
||||
self::markTestSkipped('Not implemented yet');
|
||||
self::markTestSkipped('Should be mocked!');
|
||||
|
||||
$client = ClientBuilder::create()
|
||||
->setContainer($this->getContainer())
|
||||
|
Loading…
Reference in New Issue
Block a user