1
0
mirror of synced 2024-11-26 07:16:06 +03:00
This commit is contained in:
Alex Lushpai 2016-03-09 02:31:29 +03:00
parent 9fdb2f0ada
commit 9d3e2817fe
5 changed files with 486 additions and 205 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,17 @@
namespace RetailCrm\Exception; namespace RetailCrm\Exception;
/**
* PHP version 5.3
*
* Class CurlException
*
* @category RetailCrm
* @package RetailCrm
* @author RetailCrm <integration@retailcrm.ru>
* @license https://opensource.org/licenses/MIT MIT License
* @link http://www.retailcrm.ru/docs/Developers/ApiVersion3
*/
class CurlException extends \RuntimeException class CurlException extends \RuntimeException
{ {
} }

View File

@ -2,6 +2,17 @@
namespace RetailCrm\Exception; namespace RetailCrm\Exception;
/**
* PHP version 5.3
*
* Class InvalidJsonException
*
* @category RetailCrm
* @package RetailCrm
* @author RetailCrm <integration@retailcrm.ru>
* @license https://opensource.org/licenses/MIT MIT License
* @link http://www.retailcrm.ru/docs/Developers/ApiVersion3
*/
class InvalidJsonException extends \DomainException class InvalidJsonException extends \DomainException
{ {
} }

View File

@ -6,7 +6,15 @@ use RetailCrm\Exception\CurlException;
use RetailCrm\Response\ApiResponse; use RetailCrm\Response\ApiResponse;
/** /**
* PHP version 5.3
*
* HTTP client * HTTP client
*
* @category RetailCrm
* @package RetailCrm
* @author RetailCrm <integration@retailcrm.ru>
* @license https://opensource.org/licenses/MIT MIT License
* @link http://www.retailcrm.ru/docs/Developers/ApiVersion3
*/ */
class Client class Client
{ {
@ -17,26 +25,47 @@ class Client
protected $defaultParameters; protected $defaultParameters;
protected $retry; protected $retry;
/**
* Client constructor.
*
* @param string $url api url
* @param array $defaultParameters array of parameters
*/
public function __construct($url, array $defaultParameters = array()) public function __construct($url, array $defaultParameters = array())
{ {
if (false === stripos($url, 'https://')) { if (false === stripos($url, 'https://')) {
throw new \InvalidArgumentException('API schema requires HTTPS protocol'); throw new \InvalidArgumentException(
'API schema requires HTTPS protocol'
);
} }
$this->url = $url; $this->url = $url;
$this->defaultParameters = $defaultParameters; $this->defaultParameters = $defaultParameters;
$this->retry = 0; $this->retry = 0;
$this->curlErrors = array(
CURLE_COULDNT_RESOLVE_PROXY,
CURLE_COULDNT_RESOLVE_HOST,
CURLE_COULDNT_CONNECT,
CURLE_OPERATION_TIMEOUTED,
CURLE_HTTP_POST_ERROR,
CURLE_SSL_CONNECT_ERROR,
CURLE_SEND_ERROR,
CURLE_RECV_ERROR
);
} }
/** /**
* Make HTTP request * Make HTTP request
* *
* @param string $path * @param string $path request url
* @param string $method (default: 'GET') * @param string $method (default: 'GET')
* @param array $parameters (default: array()) * @param array $parameters (default: array())
* @param int $timeout * @param int $timeout (default: 30)
* @param bool $verify * @param bool $verify (default: false)
* @param bool $debug * @param bool $debug (default: false)
*
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*
* @return ApiResponse * @return ApiResponse
*/ */
public function makeRequest( public function makeRequest(
@ -49,11 +78,13 @@ class Client
) { ) {
$allowedMethods = array(self::METHOD_GET, self::METHOD_POST); $allowedMethods = array(self::METHOD_GET, self::METHOD_POST);
if (!in_array($method, $allowedMethods)) { if (!in_array($method, $allowedMethods)) {
throw new \InvalidArgumentException(sprintf( throw new \InvalidArgumentException(
sprintf(
'Method "%s" is not valid. Allowed methods are %s', 'Method "%s" is not valid. Allowed methods are %s',
$method, $method,
implode(', ', $allowedMethods) implode(', ', $allowedMethods)
)); )
);
} }
$parameters = array_merge($this->defaultParameters, $parameters); $parameters = array_merge($this->defaultParameters, $parameters);
@ -76,7 +107,11 @@ class Client
curl_setopt($ch, CURLOPT_TIMEOUT, (int) $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, (int) $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (int) $timeout); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (int) $timeout);
} else { } else {
curl_setopt($ch, CURLOPT_TIMEOUT_MS, (int) $timeout + ($this->retry * 2000)); curl_setopt(
$ch,
CURLOPT_TIMEOUT_MS,
(int) $timeout + ($this->retry * 2000)
);
} }
if (self::METHOD_POST === $method) { if (self::METHOD_POST === $method) {
@ -91,7 +126,7 @@ class Client
curl_close($ch); curl_close($ch);
if ($errno && in_array($errno, array(6, 7, 28, 34, 35)) && $this->retry < 3) { if ($errno && in_array($errno, $this->curlErrors) && $this->retry < 3) {
$errno = null; $errno = null;
$error = null; $error = null;
$this->retry += 1; $this->retry += 1;
@ -112,6 +147,11 @@ class Client
return new ApiResponse($statusCode, $responseBody); return new ApiResponse($statusCode, $responseBody);
} }
/**
* Retry connect
*
* @return int
*/
public function getRetry() public function getRetry()
{ {
return $this->retry; return $this->retry;

View File

@ -5,7 +5,15 @@ namespace RetailCrm\Response;
use RetailCrm\Exception\InvalidJsonException; use RetailCrm\Exception\InvalidJsonException;
/** /**
* PHP version 5.3
*
* Response from retailCRM API * Response from retailCRM API
*
* @category RetailCrm
* @package RetailCrm
* @author RetailCrm <integration@retailcrm.ru>
* @license https://opensource.org/licenses/MIT MIT License
* @link http://www.retailcrm.ru/docs/Developers/ApiVersion3
*/ */
class ApiResponse implements \ArrayAccess class ApiResponse implements \ArrayAccess
{ {
@ -15,6 +23,12 @@ class ApiResponse implements \ArrayAccess
// response assoc array // response assoc array
protected $response; protected $response;
/**
* ApiResponse constructor.
*
* @param int $statusCode HTTP status code
* @param mixed $responseBody HTTP body
*/
public function __construct($statusCode, $responseBody = null) public function __construct($statusCode, $responseBody = null)
{ {
$this->statusCode = (int) $statusCode; $this->statusCode = (int) $statusCode;