Your IP : 52.15.85.225


Current Path : /home/bitrix/ext_www/dev.klimatlend.ua/bitrix/modules/currency/tools/
Upload File :
Current File : /home/bitrix/ext_www/dev.klimatlend.ua/bitrix/modules/currency/tools/get_rate.php

<?
/** @global CMain $APPLICATION */
/** @global CDatabase $DB */
use Bitrix\Main,
	Bitrix\Main\Localization\Loc,
	Bitrix\Main\Loader,
	Bitrix\Currency;

define('STOP_STATISTICS', true);
define('BX_SECURITY_SHOW_MESSAGE', true);

require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php');

Loc::loadMessages(__FILE__);

$result = array(
	'STATUS' => '',
	'MESSAGE' => '',
	'RATE_CNT' => '',
	'RATE' => ''
);

if (!check_bitrix_sessid())
{
	$result['STATUS'] = 'ERROR';
	$result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_SESSION');
}
else
{
	if (!Loader::includeModule('currency'))
	{
		$result['STATUS'] = 'ERROR';
		$result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_MODULE_ABSENT');
	}
	else
	{
		$baseCurrency = Currency\CurrencyManager::getBaseCurrency();
		$baseCurrency = '';
		$date = '';
		$currency = '';
		if (isset($_REQUEST['BASE_CURRENCY']))
			$baseCurrency = (string)$_REQUEST['BASE_CURRENCY'];
		if ($baseCurrency == '')
			$baseCurrency = Currency\CurrencyManager::getBaseCurrency();
		if (isset($_REQUEST['DATE_RATE']))
			$date = (string)$_REQUEST['DATE_RATE'];
		if (isset($_REQUEST['CURRENCY']))
			$currency = (string)$_REQUEST['CURRENCY'];

		if ($baseCurrency == '')
		{
			$result['STATUS'] = 'ERROR';
			$result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_BASE_CURRENCY_ABSENT');
		}
		elseif ($date == '' || !$DB->IsDate($date))
		{
			$result['STATUS'] = 'ERROR';
			$result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_DATE_RATE');
		}
		elseif ($currency == '')
		{
			$result['STATUS'] = 'ERROR';
			$result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_CURRENCY');
		}
		else
		{
			$url = '';
			switch ($baseCurrency)
			{
				case 'UAH':
					$url = 'https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange/?date='.$DB->FormatDate($date, CLang::GetDateFormat('SHORT', LANGUAGE_ID), 'YMD');
					break;
				case 'BYR':
				case 'BYN':
					$url = 'http://www.nbrb.by/Services/XmlExRates.aspx?ondate='.$DB->FormatDate($date, CLang::GetDateFormat('SHORT', LANGUAGE_ID), 'Y-M-D');
					break;
				case 'RUB':
				case 'RUR':
					$url = 'https://www.cbr.ru/scripts/XML_daily.asp?date_req='.$DB->FormatDate($date, CLang::GetDateFormat('SHORT', LANGUAGE_ID), 'D.M.Y');
					break;
			}
			$http = new Main\Web\HttpClient();
			$http->setRedirect(true);
			$data = $http->get($url);

			$charset = 'windows-1251';
			$matches = array();
			if (preg_match("/<"."\?XML[^>]{1,}encoding=[\"']([^>\"']{1,})[\"'][^>]{0,}\?".">/i", $data, $matches))
			{
				$charset = trim($matches[1]);
			}
			$data = preg_replace("#<!DOCTYPE[^>]+?>#i", '', $data);
			$data = preg_replace("#<"."\\?XML[^>]+?\\?".">#i", '', $data);
			$data = $APPLICATION->ConvertCharset($data, $charset, SITE_CHARSET);

			$objXML = new CDataXML();
			$res = $objXML->LoadString($data);
			if ($res !== false)
				$data = $objXML->GetArray();
			else
				$data = false;

			if (!empty($data) && is_array($data))
			{
				switch ($baseCurrency)
				{
					case 'UAH':
						if (!empty($data["exchange"]["#"]['currency']) && is_array($data["exchange"]["#"]['currency']))
						{
							$currencyList = $data['exchange']['#']['currency'];
							foreach ($currencyList as $currencyRate)
							{
								if ($currencyRate['#']['cc'][0]['#'] == $currency)
								{

									$result['STATUS'] = 'OK';
									$result['RATE_CNT'] = 1;
									$result['RATE'] = (float)str_replace(",", ".", $currencyRate['#']['rate'][0]['#']);
									break;
								}
							}
							unset($currencyRate, $currencyList);
						}
						break;
					case 'BYR':
					case 'BYN':
						if (!empty($data["DailyExRates"]["#"]["Currency"]) && is_array($data["DailyExRates"]["#"]["Currency"]))
						{
							$currencyList = $data['DailyExRates']['#']['Currency'];
							foreach ($currencyList as $currencyRate)
							{
								if ($currencyRate["#"]["CharCode"][0]["#"] == $currency)
								{
									$result['STATUS'] = 'OK';
									$result['RATE_CNT'] = (int)$currencyRate["#"]["Scale"][0]["#"];
									$result['RATE'] = (float)str_replace(",", ".", $currencyRate["#"]["Rate"][0]["#"]);
									break;
								}
							}
							unset($currencyRate, $currencyList);
						}
						break;
					case 'RUB':
					case 'RUR':
						if (!empty($data["ValCurs"]["#"]["Valute"]) && is_array($data["ValCurs"]["#"]["Valute"]))
						{
							$currencyList = $data["ValCurs"]["#"]["Valute"];
							foreach ($currencyList as $currencyRate)
							{
								if ($currencyRate["#"]["CharCode"][0]["#"] == $currency)
								{
									$result['STATUS'] = 'OK';
									$result['RATE_CNT'] = (int)$currencyRate["#"]["Nominal"][0]["#"];
									$result['RATE'] = (float)str_replace(",", ".", $currencyRate["#"]["Value"][0]["#"]);
									break;
								}
							}
							unset($currencyRate, $currencyList);
						}
						break;
				}
			}
		}
		if ($result['STATUS'] != 'OK')
		{
			$result['STATUS'] = 'ERROR';
			$result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_RESULT_ABSENT');
		}
	}
}
$APPLICATION->RestartBuffer();
header('Content-Type: application/json');
echo Main\Web\Json::encode($result);
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin_after.php');