Created
July 22, 2020 19:59
-
-
Save s3va/060e5afa233ccafc73e884dc991e4e44 to your computer and use it in GitHub Desktop.
Super Market For SeyKo2. Currency cources and metall prices from cbr.ru by SOAP.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
session_start(); | |
error_log("!!hph://input!! ".file_get_contents("php://input")." !!!!!!!!!!!!!"); | |
error_log("!!\$_POST!!!!!!! ".print_r($_POST,TRUE)." !!!!!!!!!!!!!"); | |
error_log("NNNNNN ".print_r($_SESSION,TRUE)." NNNN"); | |
if(isset($_POST['val'])){ | |
if($_POST['val']=='USD') | |
$_SESSION['val']='USD'; | |
elseif($_POST['val']=='EUR') | |
$_SESSION['val']='EUR'; | |
else | |
$_SESSION['val']='RUB'; | |
} | |
if($_SESSION['val']=='USD' && isset($_SESSION['USDcurs'])){ | |
$multiply = $_SESSION['USDcurs']; | |
$simbol = '$'; | |
}elseif($_SESSION['val']=='EUR' && isset($_SESSION['EURcurs'])){ | |
$multiply = $_SESSION['EURcurs']; | |
$simbol = '€'; // '€' | |
}else{ | |
$multiply=1; | |
$simbol= '₽'; | |
} | |
?> | |
<html> | |
<head> | |
<title> | |
Super Market | |
</title> | |
<style> | |
table { | |
border: solid; | |
} | |
td, th { | |
padding: 4px; | |
} | |
tr { | |
background: #808080; | |
} | |
.parent { | |
display: flex; | |
flex-wrap: wrap; | |
justify-content: center; | |
background: #888; | |
} | |
.box { | |
flex: 1 1 350px; /* Stretching: */ | |
flex: 0 1 600px; /* No stretching: */ | |
margin: 10px; | |
background: #ccffcc; | |
} | |
</style> | |
</head> | |
<body style="background:black;"> | |
<h2 style="text-align:center; background:brown;">This is Super Market!</h2> | |
<div class="parent white"> | |
<?php | |
$metally = array( | |
1 => 'Gold', | |
2 => 'Silver', | |
3 => 'Platina', | |
4 => 'Palladi', | |
); | |
$wsdl = 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL'; // указываем адрес WSDL-описания SOAP-сервиса, оттуда PHP возьмет информацию о доступных методах и их параметрах | |
try { | |
$euro_to = 0; | |
$cbr = new SoapClient($wsdl,array('soap_version'=> SOAP_1_2, 'exceptions'=>true)); // создаем клиент для подключения к SOAP-сервису | |
$date = $cbr->GetLatestDateTime(); // получаем последнюю дату, за которую есть курс | |
// можно, ко формировать ее вручную, но нужно учитывать, что по выходным и праздникам торги не проводятся, поэтому лучше сделать так | |
$result = $cbr->GetCursOnDateXML(array('On_date'=>$date->GetLatestDateTimeResult)); //запрашиваем данные о курсах за указанную дату в формате XML | |
// к сожалению, возможности запросить курс отдельной валюты не предусмотрено, поэтому придется пройтись циклом по всем полученным | |
if ($result->GetCursOnDateXMLResult->any) { // если в ответе сервера есть XML с курсами валют | |
// echo $result->GetCursOnDateXMLResult->any . "\n================\n"; | |
$xml = new SimpleXMLElement($result->GetCursOnDateXMLResult->any); // открываем его как XML-объект | |
// echo $xml->attributes()->OnDate . "\n===============\n"; | |
// echo $xml[0]['OnDate'] . "\n===============\n"; | |
echo "<table class=\"box red\"><caption style=\"color:white\">Currency's exchange rates on (".(new DateTime($xml[0]['OnDate']))->format("d M Y").")</caption>\n"; | |
foreach ($xml->ValuteCursOnDate as $currency) { // и начинаем обходить | |
if($currency->VchCode=='EUR'){ | |
$_SESSION['EURcurs']=(string)$currency->Vcurs; | |
echo '<tr style="background-color:silver">'; | |
}elseif($currency->VchCode=='USD'){ | |
echo '<tr style="background-color:#80FF80">'; | |
$_SESSION['USDcurs']=(string)$currency->Vcurs; | |
} else { echo "<tr>\n"; } | |
echo "<td style=\"text-align:right\">".$currency->Vnom . "</td><td>" . trim($currency->Vname) . "</td><td>" . $currency->Vcurs . " ₽</td><td style=\"text-align:right\">" . $currency->Vcode . "</td><td>" . $currency->VchCode . "</td>\n"; | |
if ($currency->VchCode=='EUR') { // VchCode содержит код валюты, для евро это EUR, для доллара — USD | |
$euro_to = floatval($currency->Vcurs); // цена за указанное в Vnom количество валюты | |
$euro_from = $currency->Vnom; // для доллара и евро количество равно единице, для других валют может отличаться | |
// чтобы получить реальный курс за одну единицу валюты, нужно разделить $currency->Vcurs на $currency->Vnom | |
} | |
echo "</tr>\n"; | |
} | |
if ($euro_to!=0) { | |
// здесь можно вставить код, который обновляет данные в магазине | |
} | |
echo "</table>\n"; | |
} else | |
echo 'Error!'; | |
} catch (Exception $e) { // на всякий случай обработчик ошибок | |
echo 'Error: '.$e->getMessage(); | |
} | |
//$wsdl = 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL'; // указываем адрес WSDL-описания SOAP-сервиса, оттуда PHP возьмет информацию о доступных методах и их параметрах | |
try { | |
// print (new DateTime)->format('c')."\n" ; | |
// print (new DateTime)->modify('-7 day')->format('c')."\n" ; | |
$cbr = new SoapClient($wsdl,array('soap_version'=> SOAP_1_2, 'exceptions'=>true)); // создаем клиент для подключения к SOAP-сервису | |
//echo $cbr->GetLatestDateTime()->GetLatestDateTimeResult."\n"; // получаем последнюю дату, за которую есть курс | |
// можно, ко формировать ее вручную, но нужно учитывать, что по выходным и праздникам торги не проводятся, поэтому лучше сделать так | |
//$result = $cbr->DragMetDynamicXML(array('fromDate'=>((new DateTime)->modify('-7 day')->format('c')),'ToDate'=>((new DateTime)->format('c')))); //запрашиваем данные о курсах за указанную дату в формате XML | |
$result = $cbr->DragMetDynamic(array('fromDate'=>((new DateTime)->modify('-7 day')->format('c')),'ToDate'=>((new DateTime)->modify('1 day')->format('c')))); //запрашиваем данные о курсах за указанную дату в формате XML | |
//echo "\n----------------\n".$result->DragMetDynamicXMLResult->any . "\n--------\n"; | |
// echo "\n----------------\n".$result->DragMetDynamicResult->any . "\n--------\n"; | |
// к сожалению, возможности запросить курс отдельной валюты не предусмотрено, поэтому придется пройтись циклом по всем полученным | |
//if ($result->DragMetDynamicXMLResult->any) { // если в ответе сервера есть XML с курсами валют | |
if ($result->DragMetDynamicResult->any) { // если в ответе сервера есть XML с курсами валют | |
//$xml = new SimpleXMLElement($result->DragMetDynamicXMLResult->any); // открываем его как XML-объект | |
$xml = new SimpleXMLElement($result->DragMetDynamicResult->any); // открываем его как XML-объект | |
// echo $xml->attributes()->OnDate . "\n===============\n"; | |
// echo $xml[0]['OnDate'] . "\n===============\n"; | |
foreach ($xml->DragMetall->DrgMet as $met) { // и начинаем обходить | |
// echo (new DateTime($met->DateMet))->format('Y M d') . " " . $metally["$met->CodMet"] . " " . $met->price . "\n"; | |
$arraydata[(new DateTime($met->DateMet))->format('Y M d')]["$met->CodMet"] = $met->price; | |
////if ($currency->VchCode=='EUR') { // VchCode содержит код валюты, для евро это EUR, для доллара — USD | |
//// $euro_to = floatval($currency->Vcurs); // цена за указанное в Vnom количество валюты | |
//// $euro_from = $currency->Vnom; // для доллара и евро количество равно единице, для других валют может отличаться | |
// чтобы получить реальный курс за одну единицу валюты, нужно разделить $currency->Vcurs на $currency->Vnom | |
////} | |
} | |
} else | |
echo 'Error!'; | |
} catch (Exception $e) { // на всякий случай обработчик ошибок | |
echo 'Error: '.$e->getMessage(); | |
} | |
//echo '<table style="border: 1px solid black; border-collapse: collapse; width: 100%;"><caption>Drag Metall Prices</caption><tr><th>Date</th>'; | |
echo "<div class=\"box white\" style=\"background:grey;\">\n"; | |
echo '<table style="width:100%;background:#ccffcc;"><caption style="color:yellow;">Drag Metall Prices</caption><tr><th>Date</th>'; | |
foreach($metally as $h){ | |
echo "<th>$h</th>"; | |
} | |
echo "</tr>\n"; | |
setlocale(LC_MONETARY, 'ru_RU'); | |
foreach($arraydata as $data => $prices) { | |
echo "<tr><th>$data</th>\n"; | |
echo "<td style=\" background-color:YELLOW\">". money_format('%.2n',$prices[1]/$multiply) ." $simbol</td><td style=\"background-color:silver\"> ". | |
money_format('%.2n',$prices[2]/$multiply) ." $simbol</td><td style=\"background-color:#d0d0d0\"> ". | |
money_format('%.2n',$prices[3]/$multiply) ." $simbol</td><td style=\"background-color:#f0f0f0\"> ". | |
money_format('%.2n',$prices[4]/$multiply) ." $simbol</td>\n"; | |
// foreach($prices as $price) { | |
// echo "<td>$price</td>"; | |
// } | |
echo "</tr>\n"; | |
} | |
echo "</table>\n"; | |
if(isset($_SESSION['val'])) | |
switch($_SESSION['val']){ | |
case 'RUB': | |
$v='USD'; | |
break; | |
case 'USD': | |
$v='EUR'; | |
break; | |
case 'EUR': | |
$v='RUB'; | |
break; | |
default: | |
$v='USD'; | |
} | |
else | |
$v='USD'; | |
echo '<form action="/" method="POST"> | |
<button type="submit" name="val" value="'.$v.'" />switch to '.$v.'</button> | |
</form>'; | |
echo "</div>\n"; | |
///// ------------------------- ///// | |
?> | |
</div> | |
</body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment