403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/sale/handlers/delivery/rest/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/sale/handlers/delivery/rest/requesthandler.php
<?php

namespace Sale\Handlers\Delivery\Rest;

use Bitrix\Main;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Delivery\Requests\HandlerBase;
use Bitrix\Sale\Delivery\Requests\RequestResult;
use Bitrix\Sale\Delivery\Requests\Result;
use Bitrix\Sale;
use Bitrix\Sale\Delivery\Requests\ShipmentResult;
use Sale\Handlers\Delivery\Rest\DataProviders;

Loc::loadMessages(__FILE__);

/***
 * Class RequestHandler
 * @package Sale\Handlers\Delivery
 */
class RequestHandler extends HandlerBase
{
	/** @var string */
	private $createRequestUrl;

	/** @var string */
	private $cancelRequestUrl;

	/** @var string */
	private $cancelActionName;

	/** @var string */
	private $deleteRequestUrl;

	/** @var bool */
	private $hasCallbackTrackingSupport = false;

	/**
	 * @param string $createRequestUrl
	 * @return RequestHandler
	 */
	public function setCreateRequestUrl(string $createRequestUrl): RequestHandler
	{
		$this->createRequestUrl = $createRequestUrl;
		return $this;
	}

	/**
	 * @param string $cancelRequestUrl
	 * @return RequestHandler
	 */
	public function setCancelRequestUrl(string $cancelRequestUrl): RequestHandler
	{
		$this->cancelRequestUrl = $cancelRequestUrl;
		return $this;
	}

	/**
	 * @param string $cancelActionName
	 * @return RequestHandler
	 */
	public function setCancelActionName(string $cancelActionName): RequestHandler
	{
		$this->cancelActionName = $cancelActionName;
		return $this;
	}

	/**
	 * @param string $deleteRequestUrl
	 * @return RequestHandler
	 */
	public function setDeleteRequestUrl(string $deleteRequestUrl): RequestHandler
	{
		$this->deleteRequestUrl = $deleteRequestUrl;
		return $this;
	}

	/**
	 * @param bool $hasCallbackTrackingSupport
	 * @return RequestHandler
	 */
	public function setHasCallbackTrackingSupport(bool $hasCallbackTrackingSupport): RequestHandler
	{
		$this->hasCallbackTrackingSupport = $hasCallbackTrackingSupport;
		return $this;
	}

	/**
	 * @inheritDoc
	 */
	public function create(array $shipmentIds, array $additional = [])
	{
		$result = new Result();

		if (!$this->createRequestUrl)
		{
			return $result->addError(new Main\Error(
				Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_ACTION_NOT_SUPPORTED'))
			);
		}

		$shipments = Sale\Repository\ShipmentRepository::getInstance()->getByIds($shipmentIds);
		if (empty($shipments))
		{
			return $result->addError(new Main\Error(
				Loc::getMessage('SALE_DELIVERY_REST_REQUEST_SHIPMENTS_NOT_FOUND'))
			);
		}

		$responseResult = Sale\Helpers\Rest\Http::sendRequest(
			$this->createRequestUrl,
			[
				'SHIPMENTS' => array_map(
					function ($shipment) { return DataProviders\Shipment::getData($shipment); },
					$shipments
				),
			],
			[
				'JSON_REQUEST' => true,
			]
		);
		if (!$responseResult->isSuccess())
		{
			return $result->addError(new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
		}

		$responseData = $responseResult->getData();
		self::preProcessResponse($responseData, $result);

		if (
			!isset($responseData['REQUEST_ID'])
			|| !is_string($responseData['REQUEST_ID'])
			|| empty($responseData['REQUEST_ID'])
		)
		{
			return $result->addError(
				new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_REQUEST_ID_NOT_SPECIFIED'))
			);
		}

		$requestResult = new RequestResult();
		$requestResult->setExternalId($responseData['REQUEST_ID']);
		foreach ($shipments as $shipment)
		{
			$requestResult->addResult(new ShipmentResult($shipment->getId()));
		}
		$result->addResult($requestResult);

		return $result;
	}

	/**
	 * @inheritDoc
	 */
	public function getActions($requestId)
	{
		return [
			$this->getCancelActionCode() => $this->getCancelActionName()
		];
	}

	/**
	 * @inheritDoc
	 */
	public function executeAction($requestId, $actionType, array $additional)
	{
		if ($actionType === $this->getCancelActionCode())
		{
			return $this->cancelRequest($requestId);
		}

		return parent::executeAction($requestId, $actionType, $additional);
	}

	/**
	 * @param $requestId
	 * @return Result
	 */
	private function cancelRequest($requestId): Result
	{
		$result = new Result();

		if (!$this->cancelRequestUrl)
		{
			return $result->addError(new Main\Error(
				Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_ACTION_NOT_SUPPORTED'))
			);
		}

		$request = Sale\Delivery\Requests\RequestTable::getById($requestId)->fetch();
		if (!$request)
		{
			return $result->addError(
				new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
			);
		}

		$responseResult = Sale\Helpers\Rest\Http::sendRequest(
			$this->cancelRequestUrl,
			[
				'DELIVERY_ID' => $request['DELIVERY_ID'],
				'REQUEST_ID' => $request['EXTERNAL_ID'],
			],
			[
				'JSON_REQUEST' => true,
			]
		);
		if (!$responseResult->isSuccess())
		{
			return $result->addError(new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
		}

		self::preProcessResponse($responseResult->getData(), $result);

		return $result;
	}

	/**
	 * @inheritDoc
	 */
	public function delete($requestId)
	{
		$result = new Result();

		if (!$this->deleteRequestUrl)
		{
			return $result;
		}

		$request = Sale\Delivery\Requests\RequestTable::getById($requestId)->fetch();
		if (!$request)
		{
			return $result->addError(
				new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_HANDLER_REQUEST_NOT_FOUND'))
			);
		}

		$responseResult = Sale\Helpers\Rest\Http::sendRequest(
			$this->deleteRequestUrl,
			[
				'DELIVERY_ID' => $request['DELIVERY_ID'],
				'REQUEST_ID' => $request['EXTERNAL_ID'],
			],
			[
				'JSON_REQUEST' => true,
			]
		);
		if (!$responseResult->isSuccess())
		{
			return $result->addError(new Main\Error(Loc::getMessage('SALE_DELIVERY_REST_REQUEST_NETWORK_ERROR')));
		}

		self::preProcessResponse($responseResult->getData(), $result);

		return $result;
	}

	/**
	 * @param array $responseData
	 * @param Main\Result $result
	 */
	private static function preProcessResponse(array $responseData, \Bitrix\Main\Result $result): void
	{
		if (!(isset($responseData['SUCCESS']) && $responseData['SUCCESS'] === 'Y'))
		{
			$errorText = (
				isset($responseData['REASON']['TEXT'])
				&& is_string($responseData['REASON']['TEXT'])
				&& !empty($responseData['REASON']['TEXT'])
			)
				? $responseData['REASON']['TEXT']
				: Loc::getMessage('SALE_DELIVERY_REST_REQUEST_UNKNOWN_ERROR');

			$result->addError(new Main\Error($errorText));
		}
	}

	/**
	 * @inheritDoc
	 */
	public function hasCallbackTrackingSupport(): bool
	{
		return $this->hasCallbackTrackingSupport;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit