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/cvetdv.ru/bitrix/modules/sale/lib/paysystem/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/sale/lib/paysystem/baseservicehandler.php
<?php
namespace Bitrix\Sale\PaySystem;

use Bitrix\Main\Application;
use Bitrix\Main\Context;
use Bitrix\Main\Text;
use Bitrix\Main\Error;
use Bitrix\Main\IO;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Request;
use Bitrix\Sale\BusinessValue;
use Bitrix\Sale\Payment;

Loc::loadMessages(__FILE__);

abstract class BaseServiceHandler
{
	const STREAM = 1;
	const STRING = 2;

	const TEST_URL = 'test';
	const ACTIVE_URL = 'active';

	protected $handlerType = '';

	protected $service = null;

	protected $extraParams = array();
	protected $initiateMode = self::STREAM;

	/** @var bool */
	protected $isClone = false;

	private array $businessCodes = [];

	/**
	 * @param Payment $payment
	 * @param Request|null $request
	 * @return ServiceResult
	 */
	abstract public function initiatePay(Payment $payment, Request $request = null);

	/**
	 * BaseServiceHandler constructor.
	 * @param $type
	 * @param Service $service
	 */
	public function __construct($type, Service $service)
	{
		$this->handlerType = $type;
		$this->service = $service;
	}

	/**
	 * @param Payment|null $payment
	 * @param string $template
	 * @return ServiceResult
	 */
	public function showTemplate(Payment $payment = null, $template = '')
	{
		$result = new ServiceResult();

		global $APPLICATION, $USER, $DB;

		$templatePath = $this->searchTemplate($template);

		if ($templatePath != '' && IO\File::isFileExists($templatePath))
		{
			$params = array_merge($this->getParamsBusValue($payment), $this->getExtraParams());

			if ($this->initiateMode == self::STREAM)
			{
				require($templatePath);

				if ($this->service->getField('ENCODING') != '')
				{
					define("BX_SALE_ENCODING", $this->service->getField('ENCODING'));
					AddEventHandler('main', 'OnEndBufferContent', array($this, 'OnEndBufferContent'));
				}
			}
			elseif ($this->initiateMode == self::STRING)
			{
				ob_start();
				$content = require($templatePath);

				$buffer = ob_get_contents();
				if ($buffer <> '')
					$content = $buffer;

				if ($this->service->getField('ENCODING') != '')
				{
					$encoding = Context::getCurrent()->getCulture()->getCharset();
					$content = Text\Encoding::convertEncoding($content, $encoding, $this->service->getField('ENCODING'));
				}

				$result->setTemplate($content);
				ob_end_clean();
			}
		}
		else
		{
			$result->addError(new Error(Loc::getMessage('SALE_PS_BASE_SERVICE_TEMPLATE_ERROR')));
		}

		return $result;
	}

	/**
	 * @param string $template
	 * @return string
	 */
	private function searchTemplate($template)
	{
		$documentRoot = Application::getDocumentRoot();
		$siteTemplate = \CSite::GetCurTemplate();
		$template = Manager::sanitize($template);
		$handlerName = static::getName();

		$folders = array();

		$folders[] = '/local/templates/' . $siteTemplate . '/payment/' . $handlerName . '/template';
		if ($siteTemplate !== '.default')
		{
			$folders[] = '/local/templates/.default/payment/' . $handlerName . '/template';
		}

		$folders[] = '/bitrix/templates/' . $siteTemplate . '/payment/' . $handlerName . '/template';
		if ($siteTemplate !== '.default')
		{
			$folders[] = '/bitrix/templates/.default/payment/' . $handlerName . '/template';
		}

		$baseFolders = Manager::getHandlerDirectories();
		if (isset($baseFolders[$this->handlerType]))
		{
			$folders[] = $baseFolders[$this->handlerType] . $handlerName . '/template';
		}

		foreach ($folders as $folder)
		{
			$templatePath = $documentRoot . $folder . '/' . $template . '.php';

			if (IO\File::isFileExists($templatePath))
			{
				return $templatePath;
			}
		}

		return '';
	}


	/**
	 * @param Payment $payment
	 * @return array
	 */
	public function getParamsBusValue(Payment $payment = null)
	{
		$params = array();
		$codes = $this->getBusinessCodes();

		if ($codes)
		{
			foreach ($codes as $code)
				$params[$code] = $this->getBusinessValue($payment, $code);
		}

		return $params;
	}

	/**
	 * @return mixed|string
	 */
	static protected function getName()
	{
		return Manager::getFolderFromClassName(get_called_class());
	}

	/**
	 * @param Payment $payment
	 * @param $code
	 * @return mixed
	 */
	protected function getBusinessValue(Payment $payment = null, $code)
	{
		$value = BusinessValue::get($code, $this->service->getConsumerName(), $payment);
		if (is_string($value))
		{
			$value = trim($value);
		}

		return $value;
	}

	/**
	 * @return array
	 */
	public function getDescription()
	{
		$description = $this->includeDescription();

		if (isset($description['CODES']) && is_array($description['CODES']))
		{
			$description['CODES'] = $this->filterDescriptionCodes($description['CODES']);
		}

		return $description;
	}

	/**
	 * @param $codes
	 * @return array
	 */
	protected function filterDescriptionCodes($codes)
	{
		$psMode = $this->service->getField('PS_MODE');

		return array_filter(
			$codes,
			static function ($code, $key) use ($psMode)
			{
				if (!isset($code['HANDLER_MODE']))
				{
					return true;
				}

				if (!is_array($code['HANDLER_MODE']))
				{
					trigger_error('HANDLER_MODE must be an array', E_USER_WARNING);
					return false;
				}

				return in_array($psMode, $code['HANDLER_MODE'], true);
			},
			ARRAY_FILTER_USE_BOTH
		);
	}

	/**
	 * @return array
	 */
	protected function getBusinessCodes()
	{
		if (!$this->businessCodes)
		{
			$description = $this->includeDescription();

			if (isset($description['CODES']) && is_array($description['CODES']))
			{
				$this->businessCodes = array_keys($description['CODES']);
			}
		}

		return $this->businessCodes;
	}

	/**
	 * @return array
	 */
	protected function getExtraParams()
	{
		return $this->extraParams;
	}

	/**
	 * @param array $values
	 */
	public function setExtraParams(array $values)
	{
		$this->extraParams = $values;
	}

	/**
	 * @return array
	 */
	public abstract function getCurrencyList();

	/**
	 * The type of client that the handler can work with
	 *
	 * If, depending on PS_MODE, the handler can work with different types of clients,
	 * then you can implement validation in a similar way:
	 *
	 * ```php
	 * 	public function getClientType($psMode)
	 * 	{
	 * 		if ($psMode === self::MODE_ALFABANK)
	 *		{
	 *			return ClientType::B2B;
	 *		}
	 *
	 *		return ClientType::B2C;
	 *	}
	 * ```
	 *
	 * @param string $psMode pay system type
	 * @return string
	 */
	public function getClientType($psMode)
	{
		return ClientType::DEFAULT;
	}

	/**
	 * @param Payment $payment
	 * @return ServiceResult
	 */
	public function creditNoDemand(Payment $payment)
	{
		return new ServiceResult();
	}

	/**
	 * @param Payment $payment
	 * @return ServiceResult
	 */
	public function debitNoDemand(Payment $payment)
	{
		return new ServiceResult();
	}

	/**
	 * @return array
	 */
	public static function getHandlerModeList()
	{
		return array();
	}

	/**
	 * @param int $mode
	 */
	public function setInitiateMode($mode)
	{
		$this->initiateMode = $mode;
	}

	/**
	 * @param Payment $payment
	 * @param string $action
	 * @return string
	 */
	protected function getUrl(Payment $payment = null, $action)
	{
		$urlList = $this->getUrlList();
		if (isset($urlList[$action]))
		{
			$url = $urlList[$action];

			if (is_array($url))
			{
				if ($this->isTestMode($payment) && isset($url[self::TEST_URL]))
					return $url[self::TEST_URL];
				else
					return $url[self::ACTIVE_URL];
			}
			else
			{
				return $url;
			}
		}

		return '';
	}

	/**
	 * @param Payment $payment
	 * @return bool
	 */
	protected function isTestMode(Payment $payment = null)
	{
		return false;
	}

	/**
	 * @return array
	 */
	protected function getUrlList()
	{
		return array();
	}


	/**
	 * @param \SplObjectStorage $cloneEntity
	 *
	 * @return BaseServiceHandler
	 */
	public function createClone(\SplObjectStorage $cloneEntity)
	{
		if ($this->isClone() && $cloneEntity->contains($this))
		{
			return $cloneEntity[$this];
		}

		$serviceHandlerClone = clone $this;
		$serviceHandlerClone->isClone = true;

		if (!$cloneEntity->contains($this))
		{
			$cloneEntity[$this] = $serviceHandlerClone;
		}

		if ($this->service)
		{
			if ($cloneEntity->contains($this->service))
			{
				$serviceHandlerClone->service = $cloneEntity[$this->service];
			}
		}

		return $serviceHandlerClone;
	}

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

	/**
	 * @return string
	 */
	public function getHandlerType()
	{
		return $this->handlerType;
	}

	/**
	 * @param $content
	 */
	public function OnEndBufferContent(&$content)
	{
		if (
			strpos($content, 'charset=') !== false
			&& strpos($content, "charset=".SITE_CHARSET) !== false
		)
		{
			header("Content-Type: text/html; charset=".BX_SALE_ENCODING);
			$content = Text\Encoding::convertEncoding($content, SITE_CHARSET, BX_SALE_ENCODING);
			$content = str_replace("charset=".SITE_CHARSET, "charset=".BX_SALE_ENCODING, $content);
		}
	}

	/**
	 * @return array
	 */
	public function getDemoParams()
	{
		return array();
	}

	/**
	 * @return bool
	 */
	public function isTuned()
	{
		return true;
	}

	protected function includeDescription(): array
	{
		$data = null;

		$documentRoot = Application::getDocumentRoot();
		$dirs = Manager::getHandlerDirectories();
		$handlerDir = $dirs[$this->handlerType];
		$file = $documentRoot . $handlerDir . static::getName() . '/.description.php';

		if (IO\File::isFileExists($file))
		{
			require $file;
		}

		return (isset($data) && is_array($data)) ? $data : [];
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit