Умный дом говорит сколько денег нужно оплатить за коммунальные, а также показания счетчиков воды.
C параметром "change=1", будет сообщать только в случае если счет уже выставлен в текущем месяце.
Данные получает из ЕРИП с сайта wmtransfer.by
Версия сырая, могут быть ошибки. Возможно нужно будет адаптировать под ваш ЖЭУ сменой кода раздели в ЕРИП (Переменная $n)
Код: Выделить всё
$n = 10011; //Коммун. платежи АИС Расчет-ЖКУ Минска
/*
если нужны другие коды, вытягивайте их самостоятельно из дерева ЕРИП
https://pay.wmtransfer.by/pls/iSOU/!iSOU.ServiceTree
выбрав нужный раздел ищите в коде <INPUT TYPE="hidden" NAME="service_no" VALUE="?????">
*/
Предварительно нужно создать объект Balance. В свойствах объекта можно хранить историю, затем строить графики расхода воды по месяцам. Роста цен на коммуналку
Код сценария getBalanceKomun:
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
if (isset($params["account"])) $account = $params["account"];
if (!$account) $account = "0000000000"; //лицевой счет только первые 10 цифр лицевого счета вместо 11 цифр вводившихся ранее
$n = 10011; //Коммун. платежи АИС Расчет-ЖКУ Минска
/*
если нужны другие коды, вытягивайте их самостоятельно из дерева ЕРИП
https://pay.wmtransfer.by/pls/iSOU/!iSOU.ServiceTree
выбрав нужный раздел ищите в коде <INPUT TYPE="hidden" NAME="service_no" VALUE="?????">
*/
function browser_get_contents($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_wmtransfer_by.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_wmtransfer_by.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://wmtransfer.by');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
function parse_form($page_cont) {
if ($page_cont) {
$page_cont = str_replace("\r" , "", $page_cont);
$page_cont = str_replace("\n" , "", $page_cont);
//print_r($page_cont);
preg_match_all("/<FORM(.*?)<\/FORM>/i", $page_cont, $matchForm);
//print_r($matchForm);
//$page_cont = $matchForm[0][0];
preg_match_all("/<INPUT(.*?)>/i", $page_cont, $matchInput);
//print_r($matchInput[1]);
foreach($matchInput[1] as $key => $value) {
preg_match_all("/NAME=\"(.*?)\"/i", $value, $matchName);
//print_r($matchName[1][0]);
preg_match_all("/VALUE=\"(.*?)\"/i", $value, $matchValue);
//print_r($matchValue[1][0]);
$param_arr[$matchName[1][0]] = $matchValue[1][0];
}
//$param_arr = array_filter($param_arr);
unset($param_arr['']);
//print_r($param_arr);
}
return $param_arr;
}
// ------------------------ BEGIN: ТЕЛО ПАРСЕРА ------------------------
$url = "http://wmtransfer.by/pay.asp?n=" . $n; //ссылка на коммунальный платеж
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$param_arr = parse_form($page_cont);
//print_r($param_arr);
$url = "https://pay.wmtransfer.by/pls/iSOU/!iSOU.Authentication?";
foreach($param_arr as $key => $value) {
$url .= "&" . $key . "=" . urlencode($value);
}
//print_r($url);
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$url = "https://pay.wmtransfer.by/pls/iSOU/!iSOU.PaymentPrepare?service_no=" . $n . "&ExtraInfoText=&ParamCount=&Amount=&AmountCurr=&ServiceInfoId=";
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$param_arr = parse_form($page_cont);
$param_arr["param1"] = $account;
//print_r($param_arr);
$url = "https://pay.wmtransfer.by/pls/iSOU/!iSOU.PaymentPrepare?";
foreach($param_arr as $key => $value) {
$url .= "&" . $key . "=" . urlencode($value);
}
//print_r($url);
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$param_arr = parse_form($page_cont);
//print_r($param_arr);
// ------------------------ END: ТЕЛО ПАРСЕРА ------------------------
// ------------------------ BEGIN: ТЕЛО ДОП ПАРСЕРА ------------------------
$url = "https://pay.wmtransfer.by/pls/iSOU/!iSOU.PaymentPrepare?";
foreach($param_arr as $key => $value) {
$url .= "&" . $key . "=" . urlencode($value);
}
//print_r($url);
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$param_arr = parse_form($page_cont);
//print_r($param_arr);
// ------------------------ END: ТЕЛО ДОП ПАРСЕРА ------------------------
$balance = $param_arr['param9'];
$balance = str_replace(",", ".", $balance);
$balance = str_replace("BYN", "", $balance);
$balance = trim($balance);
$mon_name_arr = [
'',
'январь',
'февраль',
'март',
'апрель',
'май',
'июнь',
'июль',
'август',
'сентябрь',
'октябрь',
'ноябрь',
'декабрь'
];
$komun_date = $param_arr['param3'];
if ($komun_date) {
$komun_date = "01." . $param_arr['param3'];
$komun_date = date('m', strtotime($komun_date));
$komun_date = intval($komun_date);
$komun_date = $mon_name_arr[$komun_date];
sg("Balance.KomunDate", $komun_date);
}
$cold_water = $param_arr['param4'];
if ($cold_water) {
sg("Balance.KomunColdWater", $cold_water);
if (!$change) $ret .= "Показания счетчиков. ";
if (!$change) $ret .= "Холодная вода: " . $cold_water . " кубов. ";
}
$hot_water = $param_arr['param6'];
if ($hot_water) {
sg("Balance.KomunHotWater", $hot_water);
if (!$change) $ret .= "Горячая вода: " . $hot_water . " кубов. ";
}
if ($balance) {
sg("Balance.KomunBalance", $balance);
$ret .= "Выставлен счет за Коммуналку за " . $komun_date . ": " . $balance . " р.. ";
} else {
if (!$change) $ret .= "В текущем месяце Коммуналка уже оплачена. ";
}
$ret = trim($ret);
if ($ret) {
say($ret, $level);
echo "<br>" . $ret;
}
Код для Cron (Рекомендую выполнять не чаще 2 раз в дневное время):
Код: Выделить всё
runScript("getBalanceKomun", array("change"=>"1"));
Показания счетчиков. Холодная вода: 250 кубов. Горячая вода: 440 кубов. Выставлен счет за Коммуналку за сентябрь: 27.75 р..
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.Показания счетчиков. Холодная вода: 250 кубов. Горячая вода: 440 кубов. В текущем месяце Коммуналка уже оплачена.