Если нужно проверить несколько дисконтных карт, можно вызывать скрипт с параметром $cardNumber - номер дисконтной карты (17 цифр)
Код: Выделить всё
/objects/?script=getBalanceEvroopt&cardNumber=*****************
Код сценария getBalanceEvroopt:
Код: Выделить всё
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["cardNumber"])) $cardNumber = $params["cardNumber"];
//создать аккаунт можно здесь https://e-account.by/account/ru/enter/
$username = "375*********"; //логин личного кабинета (номер телефона с кодом 375290000000)
$password = "*********"; //пароль личного кабинета
$cardNumber = "*****************"; //номер дисконтной карты (17 цифр)
function browser_get_contents($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_evroopt_by.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_evroopt_by.txt');
curl_setopt($ch, CURLOPT_REFERER, 'https://e-account.by/account/ru/enter/');
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);
$info_arr = curl_getinfo($ch);
//print_r($info_arr);
if ($info_arr['redirect_url']) {
$html = $info_arr['redirect_url'];
}
curl_close($ch);
return $html;
}
function browser_post_contents($url, $param) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie_evroopt_by.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie_evroopt_by.txt');
curl_setopt($ch, CURLOPT_REFERER, 'https://e-plus.by/cabinet/history/?cardNumber=23400100062186413');
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);
//print_r(curl_getinfo($ch));
$html = curl_exec($ch);
$info_arr = curl_getinfo($ch);
//print_r($info_arr);
if ($info_arr['redirect_url']) {
$html = $info_arr['redirect_url'];
}
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;
}
function get_diff_days($old_date) {
if ($old_date == null) return 0;
//разница между датами
$date1 = explode(".", $old_date);
$date2 = explode(".", date("d.m.Y"));
$date1 = mktime(0,0,0,$date1[1],$date1[0],$date1[2]);
$date2 = mktime(0,0,0,$date2[1],$date2[0],$date2[2]);
$diff_days = floor(($date2 - $date1) / 86400);
if ($diff_days == 0) $diff_days = "сегодня";
if ($diff_days == 1) $diff_days = "вчера";
if ($diff_days == 2) $diff_days = "позавчера";
if ($diff_days == 3) $diff_days = "3 дня назад";
if ($diff_days == 4) $diff_days = "4 дня назад";
if ($diff_days == 5) $diff_days = "5 дней назад";
if ($diff_days == 6) $diff_days = "6 дней назад";
if ($diff_days == 7) $diff_days = "неделю назад";
if ($diff_days > 7) $diff_days = $old_date;
return $diff_days;
}
@unlink('../cookie_evroopt_by.txt'); //удаляем куки
$ret = "Евро-опт. ";
$url = "https://e-account.by/account/ru/enter/";
$page_cont = browser_get_contents($url);
$param_arr = parse_form($page_cont);
$param_arr['username'] = $username;
$param_arr['password'] = $password;
$param_arr['form_name'] = 'form-login';
unset($param_arr['username_j']);
unset($param_arr['password_j']);
unset($param_arr['submit_j']);
//print_r($param_arr);
$url = "https://e-account.by/account/ru/enter/userlogin/?";
foreach($param_arr as $key => $value) {
$param .= "&" . $key . "=" . $value;
}
//print_r($url);
//print_r($param);
$page_cont = browser_post_contents($url, $param);
//print_r($page_cont);
$url = "https://e-account.by/account/";
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$url = "https://e-plus.by/cabinet/history/?cardNumber=" . $cardNumber;
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$page_cont = browser_get_contents($page_cont);
//print_r($page_cont);
$url = "https://e-account.by/account/ru/select/back/";
$page_cont = browser_get_contents($url);
//print_r($page_cont);
$page_cont = browser_get_contents($page_cont);
//print_r($page_cont);
$page_cont = browser_get_contents($page_cont);
//print_r($page_cont);
if ($page_cont) {
preg_match_all("/<strong>(.*?)<\/strong>/", $page_cont, $match);
//print_r($match);
$balance = number_format(round($match[1][1], 2), 2);
if ($balance) {
sg("Balance.EvrooptBalance" , $balance);
$ret .= "В текущем месяце " . $match[1][0] . " " . $balance . " р.. ";
}
preg_match_all("/<div class=\"info\">(.*?)<\/div>/", $page_cont, $match);
//print_r($match);
$math_count = count($match[1]);
$last_bay_date = $match[1][$math_count-6];
sg("Balance.EvrooptLastBayDate" , $last_bay_date);
$last_bay_date_diff = get_diff_days($last_bay_date);
$last_bay_summa = $match[1][$math_count-4];
$last_bay_summa = number_format(round($last_bay_summa, 2), 2);
sg("Balance.EvrooptLastBaySumma" , $last_bay_summa);
if ($last_bay_date && $last_bay_summa) {
$ret .= "Крайняя покупка была " . $last_bay_date_diff . ", на сумму " . $last_bay_summa . " р.. ";
}
} else {
$ret .= "Данные не получены. ";
//runScript("getBalanceEvroopt");
}
$ret = trim($ret);
if ($ret) {
say($ret, $level);
echo "<br>" . $ret;
}
Если есть мысли как оптимизировать улучшить код, пишите в теме.
Пример выполнения:
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.Евро-опт. В текущем месяце Общая сумма покупок: 702.70 р.. Крайняя покупка была вчера, на сумму 22.69 р.