* @license https://opensource.org/licenses/MIT MIT License * @link https://help.retailcrm.ru/Developers/ApiVersion5 */ namespace RetailCrm\Client; use RetailCrm\Http\Client; use RetailCrm\Http\RequestOptions; /** * PHP version 5.4 * * Abstract API client class * * @category RetailCrm * @package RetailCrm * @author RetailCrm * @license https://opensource.org/licenses/MIT MIT License * @link https://help.retailcrm.ru/Developers/ApiVersion5 */ abstract class AbstractLoader { /** @var string|null */ protected $siteCode; /** @var \RetailCrm\Http\Client */ protected $client; /** @var string */ protected $crmUrl; /** * Init version based client * * @param string $url api url * @param string $apiKey api key * @param string $version api version * @param string $site site code * @param bool $debug debug mode */ public function __construct($url, $apiKey, $version, $site = null, $debug = false) { if ('/' !== $url[strlen($url) - 1]) { $url .= '/'; } $this->crmUrl = $url; if (empty($version) || !in_array($version, ['v3', 'v4', 'v5'])) { throw new \InvalidArgumentException( 'Version must be not empty and must be equal one of v3|v4|v5' ); } $url = $url . 'api/' . $version; $this->client = new Client($url, ['apiKey' => $apiKey], $debug); $this->siteCode = $site; } /** * Set request options * * @param RequestOptions $options */ public function setOptions(RequestOptions $options) { $this->client->setOptions($options); } /** * Set site * * @param string $site site code * * @return void */ public function setSite($site) { $this->siteCode = $site; } /** * Check ID parameter * * @param string $by identify by * * @throws \InvalidArgumentException * * @return bool */ protected function checkIdParameter($by) { $allowedForBy = [ 'externalId', 'id' ]; if (!in_array($by, $allowedForBy, false)) { throw new \InvalidArgumentException( sprintf( 'Value "%s" for "by" param is not valid. Allowed values are %s.', $by, implode(', ', $allowedForBy) ) ); } return true; } /** * Fill params by site value * * @param string $site site code * @param array $params input parameters * * @return array */ protected function fillSite($site, array $params) { if ($site) { $params['site'] = $site; } elseif ($this->siteCode) { $params['site'] = $this->siteCode; } return $params; } /** * Return current site * * @return string */ public function getSite() { return $this->siteCode; } /** * Getting the list of available api versions * * @return \RetailCrm\Response\ApiResponse */ public function availableVersions() { return $this->client->makeRequest( $this->crmUrl . 'api/api-versions', "GET", [], true ); } /** * Getting the list of available api methods and stores for current key * * @return \RetailCrm\Response\ApiResponse */ public function credentials() { return $this->client->makeRequest( $this->crmUrl . 'api/credentials', "GET", [], true ); } }