1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
client.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\Delivery\YandexTaxi\Api\Transport;
4
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;
10
16final class Client
17{
18 private const LOG_SOURCE = 'transport';
19
21 private $oauthTokenProvider;
22
24 private $logger;
25
27 private $referralSourceBuilder;
28
30 private $socketTimeOut = 30;
31
33 private $streamTimeOut = 30;
34
36 private $isTestEnvironment = false;
37
44 public function __construct(OauthTokenProvider $oauthTokenProvider, Logger $logger, ReferralSourceBuilder $referralSourceBuilder)
45 {
46 $this->oauthTokenProvider = $oauthTokenProvider;
47 $this->logger = $logger;
48 $this->referralSourceBuilder = $referralSourceBuilder;
49 }
50
60 public function request(
61 int $version,
62 string $method,
63 string $endpoint,
64 ?array $queryParams = null,
65 $body = null
66 )
67 {
68 $httpClient = $this->makeHttpClient();
69
70 if ($method === HttpClient::HTTP_POST)
71 {
72 $result = $httpClient->post(
73 $this->getUrl($version, $endpoint, $queryParams),
74 json_encode($body, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS|JSON_HEX_QUOT)
75 );
76 }
77 else
78 {
79 $result = $httpClient->get(
80 $this->getUrl($version, $endpoint, $queryParams)
81 );
82 }
83
84 $status = $httpClient->getStatus();
85
86 if (
87 $result === false
88 || $status === 0
89 || $status >= 500
90 )
91 {
92 $errors = implode(';', $httpClient->getError());
93
94 $this->logger->log(
95 static::LOG_SOURCE,
96 (string)$status,
98 );
99
100 throw new Exception(sprintf('transport_exception: %s', $errors));
101 }
102
103 try
104 {
105 $response = Json::decode($result);
106 }
107 catch (ArgumentException $e)
108 {
109 throw new Exception(sprintf('transport_exception: unexpected JSON format: %s', $result));
110 }
111
112 return new Response((int)$httpClient->getStatus(), $response);
113 }
114
118 private function makeHttpClient(): HttpClient
119 {
120 $result = (new HttpClient(
121 [
122 'version' => HttpClient::HTTP_1_1,
123 'socketTimeout' => $this->socketTimeOut,
124 'streamTimeout' => $this->streamTimeOut,
125 ]
126 ));
127
128 $result
129 ->setHeader('Authorization', sprintf('Bearer %s', (string)$this->oauthTokenProvider->getToken()))
130 ->setHeader('Accept-Language', 'ru')
131 ->setHeader('Content-Type', 'application/json')
132 ->setHeader(
133 'User-Agent',
134 $this->referralSourceBuilder->getReferralSourceValue()
135 );
136
137 return $result;
138 }
139
146 private function getUrl(int $version, string $endpoint, ?array $queryParams): string
147 {
148 return sprintf(
149 'https://b2b.taxi%s.yandex.net/b2b/cargo/integration/v%s/%s?%s',
150 ($this->isTestEnvironment ? '.tst' : ''),
151 $version,
152 $endpoint,
153 $queryParams ? http_build_query($queryParams) : ''
154 );
155 }
156
161 public function setIsTestEnvironment(bool $isTestEnvironment): Client
162 {
163 $this->isTestEnvironment = $isTestEnvironment;
164
165 return $this;
166 }
167
171 public function isTestEnvironment(): bool
172 {
173 return $this->isTestEnvironment;
174 }
175
180 public function setSocketTimeOut(int $socketTimeOut): Client
181 {
182 $this->socketTimeOut = $socketTimeOut;
183
184 return $this;
185 }
186
191 public function setStreamTimeOut(int $streamTimeOut): Client
192 {
193 $this->streamTimeOut = $streamTimeOut;
194
195 return $this;
196 }
197
201 public function getOauthTokenProvider(): OauthTokenProvider
202 {
203 return $this->oauthTokenProvider;
204 }
205}
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$errors
Определения iblock_catalog_edit.php:74
$status
Определения session.php:10
$response
Определения result.php:21
$method
Определения index.php:27