3namespace Sale\Handlers\Delivery\Rest;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Sale\Delivery\Requests\HandlerBase;
8use Bitrix\Sale\Delivery\Requests\RequestResult;
9use Bitrix\Sale\Delivery\Requests\Result;
11use Bitrix\Sale\Delivery\Requests\ShipmentResult;
12use Sale\Handlers\Delivery\Rest\DataProviders;
14Loc::loadMessages(__FILE__);
23 private $createRequestUrl;
26 private $cancelRequestUrl;
29 private $cancelActionName;
32 private $deleteRequestUrl;
35 private $hasCallbackTrackingSupport =
false;
41 public function setCreateRequestUrl(
string $createRequestUrl): RequestHandler
43 $this->createRequestUrl = $createRequestUrl;
51 public function setCancelRequestUrl(
string $cancelRequestUrl): RequestHandler
53 $this->cancelRequestUrl = $cancelRequestUrl;
61 public function setCancelActionName(
string $cancelActionName): RequestHandler
63 $this->cancelActionName = $cancelActionName;
71 public function setDeleteRequestUrl(
string $deleteRequestUrl): RequestHandler
73 $this->deleteRequestUrl = $deleteRequestUrl;
81 public function setHasCallbackTrackingSupport(
bool $hasCallbackTrackingSupport): RequestHandler
83 $this->hasCallbackTrackingSupport = $hasCallbackTrackingSupport;
90 public function create(
array $shipmentIds,
array $additional = [])
94 if (!$this->createRequestUrl)
97 Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_HANDLER_ACTION_NOT_SUPPORTED'))
101 $shipments = Sale\Repository\ShipmentRepository::getInstance()->getByIds($shipmentIds);
102 if (empty($shipments))
105 Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_SHIPMENTS_NOT_FOUND'))
109 $responseResult = Sale\Helpers\Rest\Http::sendRequest(
110 $this->createRequestUrl,
112 'SHIPMENTS' => array_map(
113 function ($shipment) {
return DataProviders\Shipment::getData($shipment); },
118 'JSON_REQUEST' =>
true,
121 if (!$responseResult->isSuccess())
123 return $result->addError(
new Main\
Error(Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
126 $responseData = $responseResult->getData();
127 self::preProcessResponse($responseData,
$result);
130 !isset($responseData[
'REQUEST_ID'])
131 || !is_string($responseData[
'REQUEST_ID'])
132 || empty($responseData[
'REQUEST_ID'])
136 new Main\
Error(Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_REQUEST_ID_NOT_SPECIFIED'))
140 $requestResult =
new RequestResult();
141 $requestResult->setExternalId($responseData[
'REQUEST_ID']);
142 foreach ($shipments as $shipment)
144 $requestResult->addResult(
new ShipmentResult($shipment->getId()));
146 $result->addResult($requestResult);
154 public function getActions($requestId)
164 public function executeAction($requestId, $actionType,
array $additional)
168 return $this->cancelRequest($requestId);
171 return parent::executeAction($requestId, $actionType, $additional);
178 private function cancelRequest($requestId): Result
182 if (!$this->cancelRequestUrl)
185 Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_HANDLER_ACTION_NOT_SUPPORTED'))
189 $request = Sale\Delivery\Requests\RequestTable::getById($requestId)->fetch();
193 new Main\
Error(Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
197 $responseResult = Sale\Helpers\Rest\Http::sendRequest(
198 $this->cancelRequestUrl,
200 'DELIVERY_ID' =>
$request[
'DELIVERY_ID'],
201 'REQUEST_ID' =>
$request[
'EXTERNAL_ID'],
204 'JSON_REQUEST' =>
true,
207 if (!$responseResult->isSuccess())
209 return $result->addError(
new Main\
Error(Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
212 self::preProcessResponse($responseResult->getData(),
$result);
220 public function delete($requestId)
224 if (!$this->deleteRequestUrl)
229 $request = Sale\Delivery\Requests\RequestTable::getById($requestId)->fetch();
233 new Main\
Error(Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
237 $responseResult = Sale\Helpers\Rest\Http::sendRequest(
238 $this->deleteRequestUrl,
240 'DELIVERY_ID' =>
$request[
'DELIVERY_ID'],
241 'REQUEST_ID' =>
$request[
'EXTERNAL_ID'],
244 'JSON_REQUEST' =>
true,
247 if (!$responseResult->isSuccess())
249 return $result->addError(
new Main\
Error(Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
252 self::preProcessResponse($responseResult->getData(),
$result);
261 private static function preProcessResponse(
array $responseData, \Bitrix\Main\Result
$result): void
263 if (!(isset($responseData[
'SUCCESS']) && $responseData[
'SUCCESS'] ===
'Y'))
266 isset($responseData[
'REASON'][
'TEXT'])
267 && is_string($responseData[
'REASON'][
'TEXT'])
268 && !empty($responseData[
'REASON'][
'TEXT'])
270 ? $responseData[
'REASON'][
'TEXT']
271 : Loc::getMessage(
'SALE_DELIVERY_REST_REQUEST_UNKNOWN_ERROR');
282 return $this->hasCallbackTrackingSupport;
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
hasCallbackTrackingSupport()
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)