28 if (!Loader::includeModule(
'currency'))
31 $result[
'MESSAGE'] = Loc::getMessage(
'BX_CURRENCY_GET_RATE_ERR_MODULE_ABSENT');
35 $baseCurrency = Currency\CurrencyManager::getBaseCurrency();
40 $baseCurrency = (string)
$_REQUEST[
'BASE_CURRENCY'];
41 if ($baseCurrency ==
'')
42 $baseCurrency = Currency\CurrencyManager::getBaseCurrency();
48 if ($baseCurrency ==
'')
51 $result[
'MESSAGE'] = Loc::getMessage(
'BX_CURRENCY_GET_RATE_ERR_BASE_CURRENCY_ABSENT');
53 elseif ($date ==
'' || !
$DB->IsDate($date))
56 $result[
'MESSAGE'] = Loc::getMessage(
'BX_CURRENCY_GET_RATE_ERR_DATE_RATE');
61 $result[
'MESSAGE'] = Loc::getMessage(
'BX_CURRENCY_GET_RATE_ERR_CURRENCY');
66 switch ($baseCurrency)
69 $url =
'https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange/?date='.$DB->FormatDate($date, CLang::GetDateFormat(
'SHORT', LANGUAGE_ID),
'YMD');
73 $url =
'https://www.nbrb.by/Services/XmlExRates.aspx?ondate='.$DB->FormatDate($date, CLang::GetDateFormat(
'SHORT', LANGUAGE_ID),
'Y-M-D');
77 $url =
'https://www.cbr.ru/scripts/XML_daily.asp?date_req='.$DB->FormatDate($date, CLang::GetDateFormat(
'SHORT', LANGUAGE_ID),
'D.M.Y');
81 $http->setRedirect(
true);
84 $charset =
'windows-1251';
86 if (preg_match(
"/<".
"\?XML[^>]{1,}encoding=[\"']([^>\"']{1,})[\"'][^>]{0,}\?".
">/i",
$data,
$matches))
90 $data = preg_replace(
"#<!DOCTYPE[^>]+?>#i",
'',
$data);
91 $data = preg_replace(
"#<".
"\\?XML[^>]+?\\?".
">#i",
'',
$data);
97 $data = $objXML->GetArray();
103 switch ($baseCurrency)
106 if (!empty(
$data[
"exchange"][
"#"][
'currency']) && is_array(
$data[
"exchange"][
"#"][
'currency']))
108 $currencyList =
$data[
'exchange'][
'#'][
'currency'];
109 foreach ($currencyList as $currencyRate)
111 if ($currencyRate[
'#'][
'cc'][0][
'#'] ==
$currency)
116 $result[
'RATE'] = (float)str_replace(
",",
".", $currencyRate[
'#'][
'rate'][0][
'#']);
120 unset($currencyRate, $currencyList);
125 if (!empty(
$data[
"DailyExRates"][
"#"][
"Currency"]) && is_array(
$data[
"DailyExRates"][
"#"][
"Currency"]))
127 $currencyList =
$data[
'DailyExRates'][
'#'][
'Currency'];
128 foreach ($currencyList as $currencyRate)
130 if ($currencyRate[
"#"][
"CharCode"][0][
"#"] ==
$currency)
133 $result[
'RATE_CNT'] = (int)$currencyRate[
"#"][
"Scale"][0][
"#"];
134 $result[
'RATE'] = (float)str_replace(
",",
".", $currencyRate[
"#"][
"Rate"][0][
"#"]);
138 unset($currencyRate, $currencyList);
143 if (!empty(
$data[
"ValCurs"][
"#"][
"Valute"]) && is_array(
$data[
"ValCurs"][
"#"][
"Valute"]))
145 $currencyList =
$data[
"ValCurs"][
"#"][
"Valute"];
146 foreach ($currencyList as $currencyRate)
148 if ($currencyRate[
"#"][
"CharCode"][0][
"#"] ==
$currency)
151 $result[
'RATE_CNT'] = (int)$currencyRate[
"#"][
"Nominal"][0][
"#"];
152 $result[
'RATE'] = (float)str_replace(
",",
".", $currencyRate[
"#"][
"Value"][0][
"#"]);
156 unset($currencyRate, $currencyList);
165 $result[
'MESSAGE'] = Loc::getMessage(
'BX_CURRENCY_GET_RATE_ERR_RESULT_ABSENT');
static convertEncoding($data, $charsetFrom, $charsetTo)
static encode($data, $options=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)