уу
verify($_GET['email-verify'])) $view->showVerifiedEmail(); else $view->showVerifiedEmailError(); unset($_SESSION['accounts']); }elseif(date('d') < 21 || date('d') > 28) { echo 'Уважаемый абонент!
' . 'Передача показаний приборов учета осуществляется только с 21 по 28 число расчетного месяца.'. 'А сейчас вы можете оплатить электроэнергию в своем личном кабинете.
'; } elseif(isset($_GET['done'])){ //Показания переданы $view = new view(); $view->showDone(); } elseif(isset($_GET['done-email'])){ //Отправлено тестовое письмо для подтверждения email'а $email = isset($_POST['email']) && $_POST['email'] ? htmlspecialchars($_POST['email']) : ''; $view = new view(); try { $account = ''; foreach ($_SESSION['accounts'] as $key => $obj) { $account = $key; break; } if(!$account) return Header('Location: /peredat-pokazaniya/'); else { $confirm = new emailComfirm(); $confirm->send($account, $email); $view->showDoneEmail($email); } } catch (Exception $e) { $view->showDoneEmail($email, $e->getMessage()); } } else { //Передача показаний try { $postAccount = isset($_POST['account']) && $_POST['account'] ? intval($_POST['account']) : ''; $postCaptcha = isset($_POST['g-recaptcha-response'])? $_POST['g-recaptcha-response'] : ''; $postData = isset($_POST['data']) && is_array($_POST['data'])? array_map('intval', $_POST['data']) : array(); $captcha = new captcha(); $billing = new Billing(); $view = new view(); $error = array(); if(isset($_POST['account'])) { //Заполнен номер лицевого счета if(!$captcha->checkCaptcha($postCaptcha)) $error['captcha'] = 1; if(!$accounts = $billing->getAccounts($postAccount)) $error['account'] = 1; if(empty($error)) { $_SESSION['accounts'] = $accounts; $view->showDataForm($error, $accounts, $postData); } else { $view->showAccountForm($error, $postAccount); } } elseif (isset($_POST['data']) && isset($_SESSION['accounts'])) { //Заполнены показания foreach($_SESSION['accounts'] as $acc => $data) if(!isset($postData[$acc]) || !$postData[$acc]) $error['data'][$acc] = 1;//Показания не заполнены elseif($postData[$acc] < $data->counter) $error['data'][$acc] = 2;//Меньше предыдущих показаний elseif(strlen($postData[$acc]) > $data->counterSize) $error['data'][$acc] = 3; //Неверная значность счетчика elseif(empty($error['data']) && !$billing->setReadingsData($acc, $postData[$acc])) $error['data'][$acc] = 4; if(empty($error)) Header('Location: ?done'); else $view->showDataForm($error, $_SESSION['accounts'], $postData); } //Ничего не заполнено else { $view->showAccountForm($error, $postAccount); } } catch (Exception $e) { echo '
Сервис временно недоступен
Обновите страницу или свяжитесь с нами по телефону 8 (495) 133-65-40.'; echo $e->getMessage(); exit; } } class Billing { public function getAccounts($userId) { if(!$userId) return false; $req = array('command' => 'get', 'account' => $userId); $response = $this->get_url('https://billing.ivseti.org/readings/?' . http_build_query($req)); $content = json_decode($response['content']); if($content->result == 5) return false; if($content->result != 0) throw new \Exception('Billing is not available.'); return $content->data; } public function setReadingsData($account, $value) { $req = array('command' => 'set', 'account' => $account, 'value' => $value); $response = $this->get_url('https://billing.ivseti.org/readings/?' . http_build_query($req)); $content = json_decode($response['content']); if($content->result != 0) throw new \Exception('Billing is not available.'); return $content->data; } public function setEmail($account, $email) { $req = array('command' => 'set', 'account' => $account, 'value' => $email); $response = $this->get_url('https://billing.ivseti.org/emails/?' . http_build_query($req)); $content = json_decode($response['content']); if($content->result != 0) throw new \Exception('Billing is not available.'); return $content->data; } private function get_url( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_USERAGENT => "www.ivseti.org", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 3, // timeout on connect CURLOPT_TIMEOUT => 5, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_VERBOSE => true, CURLOPT_SSLCERT=> '/home/ivsetior/ssl-billing/ivsetiorg.crt', CURLOPT_SSLKEY=> '/home/ivsetior/ssl-billing/ivsetiorg.key', CURLOPT_SSLCERTPASSWD => '', CURLOPT_SSLKEYPASSWD => '' ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } } class captcha { private $api_key = '6LcepRUTAAAAAKezqFEfR0s9Qu8_L6UjrB7124az'; public function checkCaptcha($value) { return true; if(!$value) return false; $req = array('secret' => $this->api_key, 'response' => $value, 'remoteip' => $_SERVER['REMOTE_ADDR']); $response = $this->get_url('https://www.google.com/recaptcha/api/siteverify?' . http_build_query($req)); if($response['errno']) throw new \Exception('ReCaptcha servers is not available.'); $result = json_decode($response['content']); return isset($result->success) && ($result->success == true) ? true : false; } private function get_url( $url ) { $options = array( CURLOPT_RETURNTRANSFER => true, // return web page CURLOPT_HEADER => false, // don't return headers CURLOPT_FOLLOWLOCATION => true, // follow redirects CURLOPT_ENCODING => "", // handle all encodings CURLOPT_USERAGENT => "www.ivseti.org", // who am i CURLOPT_AUTOREFERER => true, // set referer on redirect CURLOPT_CONNECTTIMEOUT => 3, // timeout on connect CURLOPT_TIMEOUT => 5, // timeout on response CURLOPT_MAXREDIRS => 10, // stop after 10 redirects CURLOPT_SSL_VERIFYPEER => false // Disabled SSL Cert checks ); $ch = curl_init( $url ); curl_setopt_array( $ch, $options ); $content = curl_exec( $ch ); $err = curl_errno( $ch ); $errmsg = curl_error( $ch ); $header = curl_getinfo( $ch ); curl_close( $ch ); $header['errno'] = $err; $header['errmsg'] = $errmsg; $header['content'] = $content; return $header; } } class emailComfirm { public function send($account, $email) { if(!filter_var($email, FILTER_VALIDATE_EMAIL)) throw new Exception('Укажите правильный email'); $token = md5(uniqid('txt' . $email . rand(0,1000),1)); $mysqli = new mysqli(DB_HOST, DB_USER_NAME, DB_PASSWORD, DB_NAME); $query = $mysqli->prepare('INSERT INTO readings_email (email, token, account, verified, date) VALUES(?,?,?,0, NOW())'); $query->bind_param('ssi', $email, $token, $account); $query->execute(); $query->close(); $mysqli->close(); $subject = 'Проверочное письмо для получения счетов за электроэнергию'; $url = 'http://ivseti.org/peredat-pokazaniya/?email-verify='.$token; $text = '
Ваш электронный адрес был указан для получения счетов за электроэнергию от МУП "Ивантеевские Электросети".
Если это сделали вы, пройдите по ссылке для подтвреждения электронного ящика '.$url.'
Если письмо попало к вам по ошибке, пожалуйста, проигнорируйте и удалите его из своего почтового ящика.
---
С уважением,
МУП "Ивантеевские Электросети"
эл.почта: pokazaniya@ivseti.org
тел.: +7 (496) 536-00-42
веб-сайт: http://www.ivseti.org
Введите свои данные
showHeader(); ?>
Введите показания счетчика
showHeader(); $emailObj = new emailComfirm(); $email = $emailObj->getEmail(); echo '
Ваши показания успешно приняты
До 5-го числа по почте придет счет для оплаты электроэнергии.'; if($email) echo 'Счет будет продублирован на электронную почту '. htmlspecialchars($email) . '
'; echo '
Высылать счета '. ($email?'на другой ящик':'по электронной почте') .'
'; } public function showDoneEmail($email = '', $error = '') { $this->showHeader(); if(!$error) echo '
Проверьте электронную почту
Мы отправили вам проверочное письмо, чтобы счет за свет случайно не потерялся.Пожалуйста, проверьте свою почту и пройдите по ссылке из письма.
Мне не пришло проверочное письмо
'; else echo '
Произошла ошибка
Мы пытались отправить вам проверочное письмо, чтобы счет за свет случайно не потерялся.И при этом произошла ошибка. Проверьте свой ящик и попробуйте еще раз.
'; } public function showVerifiedEmail(){ $this->showHeader(); echo '
Счета будут приходить на электронную почту
Поздравляем, теперь счета за электроэнергию будут поступать вам по электронной почте.Хотите передать новые показания?
'; } public function showVerifiedEmailError(){ $this->showHeader(); echo '
Произошла ошибка!
Проверочного кода не существует или проверочное письмо отправлено более 3-х суток назад.Передать показания и повторить запрос
'; } private function showHeader() { echo '' . ''. ''. ' '; } } ?>
Комиссия % |
При ошибочном перечислении, денежные средства могут быть возвращены только на Вашу карту.