1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
get_rate.php
См. документацию.
1<?php
8
9const STOP_STATISTICS = true;
11
12require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_admin_before.php');
13
15 'STATUS' => '',
16 'MESSAGE' => '',
17 'RATE_CNT' => '',
18 'RATE' => '',
19];
20
22{
23 $result['STATUS'] = 'ERROR';
24 $result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_SESSION');
25}
26else
27{
28 if (!Loader::includeModule('currency'))
29 {
30 $result['STATUS'] = 'ERROR';
31 $result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_MODULE_ABSENT');
32 }
33 else
34 {
35 $baseCurrency = Currency\CurrencyManager::getBaseCurrency();
36 $baseCurrency = '';
37 $date = '';
38 $currency = '';
39 if (isset($_REQUEST['BASE_CURRENCY']))
40 $baseCurrency = (string)$_REQUEST['BASE_CURRENCY'];
41 if ($baseCurrency == '')
42 $baseCurrency = Currency\CurrencyManager::getBaseCurrency();
43 if (isset($_REQUEST['DATE_RATE']))
44 $date = (string)$_REQUEST['DATE_RATE'];
45 if (isset($_REQUEST['CURRENCY']))
46 $currency = (string)$_REQUEST['CURRENCY'];
47
48 if ($baseCurrency == '')
49 {
50 $result['STATUS'] = 'ERROR';
51 $result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_BASE_CURRENCY_ABSENT');
52 }
53 elseif ($date == '' || !$DB->IsDate($date))
54 {
55 $result['STATUS'] = 'ERROR';
56 $result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_DATE_RATE');
57 }
58 elseif ($currency == '')
59 {
60 $result['STATUS'] = 'ERROR';
61 $result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_CURRENCY');
62 }
63 else
64 {
65 $url = '';
66 switch ($baseCurrency)
67 {
68 case 'UAH':
69 $url = 'https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange/?date='.$DB->FormatDate($date, CLang::GetDateFormat('SHORT', LANGUAGE_ID), 'YMD');
70 break;
71 case 'BYR':
72 case 'BYN':
73 $url = 'https://www.nbrb.by/Services/XmlExRates.aspx?ondate='.$DB->FormatDate($date, CLang::GetDateFormat('SHORT', LANGUAGE_ID), 'Y-M-D');
74 break;
75 case 'RUB':
76 case 'RUR':
77 $url = 'https://www.cbr.ru/scripts/XML_daily.asp?date_req='.$DB->FormatDate($date, CLang::GetDateFormat('SHORT', LANGUAGE_ID), 'D.M.Y');
78 break;
79 }
80 $http = new Main\Web\HttpClient();
81 $http->setRedirect(true);
82 $data = $http->get($url);
83
84 $charset = 'windows-1251';
85 $matches = [];
86 if (preg_match("/<"."\?XML[^>]{1,}encoding=[\"']([^>\"']{1,})[\"'][^>]{0,}\?".">/i", $data, $matches))
87 {
88 $charset = trim($matches[1]);
89 }
90 $data = preg_replace("#<!DOCTYPE[^>]+?>#i", '', $data);
91 $data = preg_replace("#<"."\\?XML[^>]+?\\?".">#i", '', $data);
93
94 $objXML = new CDataXML();
95 $res = $objXML->LoadString($data);
96 if ($res !== false)
97 $data = $objXML->GetArray();
98 else
99 $data = false;
100
101 if (!empty($data) && is_array($data))
102 {
103 switch ($baseCurrency)
104 {
105 case 'UAH':
106 if (!empty($data["exchange"]["#"]['currency']) && is_array($data["exchange"]["#"]['currency']))
107 {
108 $currencyList = $data['exchange']['#']['currency'];
109 foreach ($currencyList as $currencyRate)
110 {
111 if ($currencyRate['#']['cc'][0]['#'] == $currency)
112 {
113
114 $result['STATUS'] = 'OK';
115 $result['RATE_CNT'] = 1;
116 $result['RATE'] = (float)str_replace(",", ".", $currencyRate['#']['rate'][0]['#']);
117 break;
118 }
119 }
120 unset($currencyRate, $currencyList);
121 }
122 break;
123 case 'BYR':
124 case 'BYN':
125 if (!empty($data["DailyExRates"]["#"]["Currency"]) && is_array($data["DailyExRates"]["#"]["Currency"]))
126 {
127 $currencyList = $data['DailyExRates']['#']['Currency'];
128 foreach ($currencyList as $currencyRate)
129 {
130 if ($currencyRate["#"]["CharCode"][0]["#"] == $currency)
131 {
132 $result['STATUS'] = 'OK';
133 $result['RATE_CNT'] = (int)$currencyRate["#"]["Scale"][0]["#"];
134 $result['RATE'] = (float)str_replace(",", ".", $currencyRate["#"]["Rate"][0]["#"]);
135 break;
136 }
137 }
138 unset($currencyRate, $currencyList);
139 }
140 break;
141 case 'RUB':
142 case 'RUR':
143 if (!empty($data["ValCurs"]["#"]["Valute"]) && is_array($data["ValCurs"]["#"]["Valute"]))
144 {
145 $currencyList = $data["ValCurs"]["#"]["Valute"];
146 foreach ($currencyList as $currencyRate)
147 {
148 if ($currencyRate["#"]["CharCode"][0]["#"] == $currency)
149 {
150 $result['STATUS'] = 'OK';
151 $result['RATE_CNT'] = (int)$currencyRate["#"]["Nominal"][0]["#"];
152 $result['RATE'] = (float)str_replace(",", ".", $currencyRate["#"]["Value"][0]["#"]);
153 break;
154 }
155 }
156 unset($currencyRate, $currencyList);
157 }
158 break;
159 }
160 }
161 }
162 if ($result['STATUS'] != 'OK')
163 {
164 $result['STATUS'] = 'ERROR';
165 $result['MESSAGE'] = Loc::getMessage('BX_CURRENCY_GET_RATE_ERR_RESULT_ABSENT');
166 }
167 }
168}
169$APPLICATION->RestartBuffer();
170header('Content-Type: application/json');
172require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/epilog_admin_after.php');
global $APPLICATION
Определения include.php:80
Определения loader.php:13
static convertEncoding($data, $charsetFrom, $charsetTo)
Определения encoding.php:17
static encode($data, $options=null)
Определения json.php:22
Определения xml.php:396
$data['IS_AVAILABLE']
Определения .description.php:13
$res
Определения filter_act.php:7
const STOP_STATISTICS
Определения froogle_util.php:2
const BX_SECURITY_SHOW_MESSAGE
Определения froogle_util.php:3
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
const SITE_CHARSET
Определения include.php:62
check_bitrix_sessid($varname='sessid')
Определения tools.php:4686
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$currency
Определения template.php:266
$matches
Определения index.php:22
$url
Определения iframe.php:7