3namespace Sale\Handlers\Delivery\YandexTaxi\Api\Transport;
5use Bitrix\Main\ArgumentException;
6use Bitrix\Main\Web\HttpClient;
7use Bitrix\Main\Web\Json;
8use Sale\Handlers\Delivery\YandexTaxi\Common\Logger;
9use Sale\Handlers\Delivery\YandexTaxi\Common\ReferralSourceBuilder;
18 private const LOG_SOURCE =
'transport';
21 private $oauthTokenProvider;
27 private $referralSourceBuilder;
30 private $socketTimeOut = 30;
33 private $streamTimeOut = 30;
36 private $isTestEnvironment =
false;
44 public function __construct(OauthTokenProvider $oauthTokenProvider, Logger $logger, ReferralSourceBuilder $referralSourceBuilder)
46 $this->oauthTokenProvider = $oauthTokenProvider;
47 $this->logger = $logger;
48 $this->referralSourceBuilder = $referralSourceBuilder;
60 public function request(
64 ?
array $queryParams =
null,
68 $httpClient = $this->makeHttpClient();
70 if (
$method === HttpClient::HTTP_POST)
73 $this->getUrl($version, $endpoint, $queryParams),
74 json_encode($body, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT)
80 $this->getUrl($version, $endpoint, $queryParams)
84 $status = $httpClient->getStatus();
92 $errors = implode(
';', $httpClient->getError());
100 throw new Exception(sprintf(
'transport_exception: %s',
$errors));
107 catch (ArgumentException $e)
109 throw new Exception(sprintf(
'transport_exception: unexpected JSON format: %s',
$result));
112 return new Response((
int)$httpClient->getStatus(),
$response);
118 private function makeHttpClient(): HttpClient
122 'version' => HttpClient::HTTP_1_1,
123 'socketTimeout' => $this->socketTimeOut,
124 'streamTimeout' => $this->streamTimeOut,
129 ->setHeader(
'Authorization', sprintf(
'Bearer %s', (
string)$this->oauthTokenProvider->getToken()))
130 ->setHeader(
'Accept-Language',
'ru')
131 ->setHeader(
'Content-Type',
'application/json')
134 $this->referralSourceBuilder->getReferralSourceValue()
146 private function getUrl(
int $version,
string $endpoint, ?
array $queryParams): string
149 'https://b2b.taxi%s.yandex.net/b2b/cargo/integration/v%s/%s?%s',
150 ($this->isTestEnvironment ?
'.tst' :
''),
153 $queryParams ? http_build_query($queryParams) :
''
161 public function setIsTestEnvironment(
bool $isTestEnvironment): Client
163 $this->isTestEnvironment = $isTestEnvironment;
171 public function isTestEnvironment(): bool
173 return $this->isTestEnvironment;
180 public function setSocketTimeOut(
int $socketTimeOut): Client
182 $this->socketTimeOut = $socketTimeOut;
191 public function setStreamTimeOut(
int $streamTimeOut): Client
193 $this->streamTimeOut = $streamTimeOut;
201 public function getOauthTokenProvider(): OauthTokenProvider
203 return $this->oauthTokenProvider;
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)