1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
requesthandler.php
См. документацию.
1<?php
2
3namespace Sale\Handlers\Delivery\Rest;
4
5use Bitrix\Main;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Sale\Delivery\Requests\HandlerBase;
8use Bitrix\Sale\Delivery\Requests\RequestResult;
9use Bitrix\Sale\Delivery\Requests\Result;
10use Bitrix\Sale;
11use Bitrix\Sale\Delivery\Requests\ShipmentResult;
12use Sale\Handlers\Delivery\Rest\DataProviders;
13
14Loc::loadMessages(__FILE__);
15
16/***
17 * Class RequestHandler
18 * @package Sale\Handlers\Delivery
19 */
20class RequestHandler extends HandlerBase
21{
23 private $createRequestUrl;
24
26 private $cancelRequestUrl;
27
29 private $cancelActionName;
30
32 private $deleteRequestUrl;
33
35 private $hasCallbackTrackingSupport = false;
36
41 public function setCreateRequestUrl(string $createRequestUrl): RequestHandler
42 {
43 $this->createRequestUrl = $createRequestUrl;
44 return $this;
45 }
46
51 public function setCancelRequestUrl(string $cancelRequestUrl): RequestHandler
52 {
53 $this->cancelRequestUrl = $cancelRequestUrl;
54 return $this;
55 }
56
61 public function setCancelActionName(string $cancelActionName): RequestHandler
62 {
63 $this->cancelActionName = $cancelActionName;
64 return $this;
65 }
66
71 public function setDeleteRequestUrl(string $deleteRequestUrl): RequestHandler
72 {
73 $this->deleteRequestUrl = $deleteRequestUrl;
74 return $this;
75 }
76
81 public function setHasCallbackTrackingSupport(bool $hasCallbackTrackingSupport): RequestHandler
82 {
83 $this->hasCallbackTrackingSupport = $hasCallbackTrackingSupport;
84 return $this;
85 }
86
90 public function create(array $shipmentIds, array $additional = [])
91 {
92 $result = new Result();
93
94 if (!$this->createRequestUrl)
95 {
96 return $result->addError(new Main\Error(
97 Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_ACTION_NOT_SUPPORTED'))
98 );
99 }
100
101 $shipments = Sale\Repository\ShipmentRepository::getInstance()->getByIds($shipmentIds);
102 if (empty($shipments))
103 {
104 return $result->addError(new Main\Error(
105 Loc::getMessage('SALE_DELIVERY_REST_REQUEST_SHIPMENTS_NOT_FOUND'))
106 );
107 }
108
109 $responseResult = Sale\Helpers\Rest\Http::sendRequest(
110 $this->createRequestUrl,
111 [
112 'SHIPMENTS' => array_map(
113 function ($shipment) { return DataProviders\Shipment::getData($shipment); },
114 $shipments
115 ),
116 ],
117 [
118 'JSON_REQUEST' => true,
119 ]
120 );
121 if (!$responseResult->isSuccess())
122 {
123 return $result->addError(new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
124 }
125
126 $responseData = $responseResult->getData();
127 self::preProcessResponse($responseData, $result);
128
129 if (
130 !isset($responseData['REQUEST_ID'])
131 || !is_string($responseData['REQUEST_ID'])
132 || empty($responseData['REQUEST_ID'])
133 )
134 {
135 return $result->addError(
136 new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_REQUEST_ID_NOT_SPECIFIED'))
137 );
138 }
139
140 $requestResult = new RequestResult();
141 $requestResult->setExternalId($responseData['REQUEST_ID']);
142 foreach ($shipments as $shipment)
143 {
144 $requestResult->addResult(new ShipmentResult($shipment->getId()));
145 }
146 $result->addResult($requestResult);
147
148 return $result;
149 }
150
154 public function getActions($requestId)
155 {
156 return [
157 $this->getCancelActionCode() => $this->getCancelActionName()
158 ];
159 }
160
164 public function executeAction($requestId, $actionType, array $additional)
165 {
166 if ($actionType === $this->getCancelActionCode())
167 {
168 return $this->cancelRequest($requestId);
169 }
170
171 return parent::executeAction($requestId, $actionType, $additional);
172 }
173
178 private function cancelRequest($requestId): Result
179 {
180 $result = new Result();
181
182 if (!$this->cancelRequestUrl)
183 {
184 return $result->addError(new Main\Error(
185 Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_ACTION_NOT_SUPPORTED'))
186 );
187 }
188
189 $request = Sale\Delivery\Requests\RequestTable::getById($requestId)->fetch();
190 if (!$request)
191 {
192 return $result->addError(
193 new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
194 );
195 }
196
197 $responseResult = Sale\Helpers\Rest\Http::sendRequest(
198 $this->cancelRequestUrl,
199 [
200 'DELIVERY_ID' => $request['DELIVERY_ID'],
201 'REQUEST_ID' => $request['EXTERNAL_ID'],
202 ],
203 [
204 'JSON_REQUEST' => true,
205 ]
206 );
207 if (!$responseResult->isSuccess())
208 {
209 return $result->addError(new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
210 }
211
212 self::preProcessResponse($responseResult->getData(), $result);
213
214 return $result;
215 }
216
220 public function delete($requestId)
221 {
222 $result = new Result();
223
224 if (!$this->deleteRequestUrl)
225 {
226 return $result;
227 }
228
229 $request = Sale\Delivery\Requests\RequestTable::getById($requestId)->fetch();
230 if (!$request)
231 {
232 return $result->addError(
233 new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
234 );
235 }
236
237 $responseResult = Sale\Helpers\Rest\Http::sendRequest(
238 $this->deleteRequestUrl,
239 [
240 'DELIVERY_ID' => $request['DELIVERY_ID'],
241 'REQUEST_ID' => $request['EXTERNAL_ID'],
242 ],
243 [
244 'JSON_REQUEST' => true,
245 ]
246 );
247 if (!$responseResult->isSuccess())
248 {
249 return $result->addError(new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
250 }
251
252 self::preProcessResponse($responseResult->getData(), $result);
253
254 return $result;
255 }
256
261 private static function preProcessResponse(array $responseData, \Bitrix\Main\Result $result): void
262 {
263 if (!(isset($responseData['SUCCESS']) && $responseData['SUCCESS'] === 'Y'))
264 {
265 $errorText = (
266 isset($responseData['REASON']['TEXT'])
267 && is_string($responseData['REASON']['TEXT'])
268 && !empty($responseData['REASON']['TEXT'])
269 )
270 ? $responseData['REASON']['TEXT']
271 : Loc::getMessage('SALE_DELIVERY_REST_REQUEST_UNKNOWN_ERROR');
272
273 $result->addError(new Main\Error($errorText));
274 }
275 }
276
280 public function hasCallbackTrackingSupport(): bool
281 {
282 return $this->hasCallbackTrackingSupport;
283 }
284}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
</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
trait Error
Определения error.php:11