function sendFeedbackSMSCode() { $objResponse = new xajaxResponse(); $uid = get_uid(false); $reqv = sbr_meta::getUserReqvs($uid); $phone = $reqv[$reqv['form_type']]['mob_phone']; $code = rand(1000, 9999); $_SESSION['close_sbr_smscode'] = $code; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sms_gate_a1.php'; $sms_gate = new sms_gate_a1($phone); $sms_gate->sendSMS($sms_gate->getTextMessage(sms_gate::TYPE_CLOSE_SBR, $code)); $objResponse->script("\$('sbr_sms_code').set('value', '');"); $objResponse->script("\$('sbr_sms_code').removeClass('b-input__text_error');"); $objResponse->script("\$('sbr_send_sms_link').addClass('b-layout_hide'); \$('sbr_send_sms_link_disabled').removeClass('b-layout_hide');"); $objResponse->script("setTimeout(function() { \$('sbr_send_sms_link').removeClass('b-layout_hide'); \$('sbr_send_sms_link_disabled').addClass('b-layout_hide'); }, 60000);"); return $objResponse; }
/** * Забыли пароль. Телефон. * * @param array $aParams массив входящих данных * @return array $aResult ответ */ protected function x____users_forgot_phone($aParams = array()) { $this->_validDevice($aParams); $sLogin = __paramValue('string', $aParams['username'], null, true); if (!empty($sLogin)) { require_once ABS_PATH . '/classes/sms_gate_a1.php'; require_once ABS_PATH . '/classes/sbr_meta.php'; require_once ABS_PATH . '/classes/users.php'; // проверяем существует ли пользователь с таким логином $oUser = new users(); $oUser->GetUser($sLogin); if ($oUser->uid) { $safety = sbr_meta::findSafetyPhoneByLogin($sLogin); if ($safety) { $passwd = users::ResetPasswordSMS($safety['uid'], $safety['phone']); $sms_gate = new sms_gate_a1($safety['phone']); $sms_gate->sendSMS($sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)); if ($sms_gate->getHTTPCode() != 200) { $this->error(EXTERNAL_ERR_SEND_SMS); } } else { $this->error(EXTERNAL_ERR_PHONE_NOT_FOUND); } } else { $this->error(EXTERNAL_ERR_USER_NOTFOUND); } } else { $this->error(EXTERNAL_ERR_EMPTY_USERNAME); } return array(); }
/** * напоминание пароля через телефон и логин. * * @param $phone * @param $login * @param $rnd * @param $captchanum * * @return xajaxResponse */ function RemindByPhoneAndLogin($phone, $login, $rnd, $captchanum) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sms_gate_a1.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; session_start(); $objResponse = new xajaxResponse(); $phone = trim($phone); $login = trim($login); // проверка капчи $captcha = new captcha($captchanum); if (!$captcha->checkNumber(trim($rnd))) { $captcha->setNumber(); $error = 'Вы ввели неверную комбинацию букв'; sendPhoneRemindError($objResponse, $error, $captchanum, 'captcha'); return $objResponse; } // проверка правильности введенного номера $i_phone = users::CheckSafetyPhone($phone); if ($phone && $i_phone['error_flag']) { $captcha->setNumber(); $error = 'Вы ввели телефон в недопустимом формате'; sendPhoneRemindError($objResponse, $error, $captchanum, 'phone'); return $objResponse; } // проверка наличия номера в базе if ($phone) { $safetyPhones = sbr_meta::findSafetyPhones($phone); if (!count($safetyPhones)) { $error = 'Этот номер телефона не связан ни с одним аккаунтом. Попробуйте восстановить доступ через логин или email'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'phone'); return $objResponse; } foreach ($safetyPhones as $safetyPhone) { $checkUser = new users(); $checkUser->GetUser($safetyPhone['login']); if ($checkUser->is_banned) { $error = 'Аккаунт с указанным номером телефона заблокирован или удален.\\nСожалеем, но восстановить пароль к нему в данный момент нельзя.'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } } // если на один номер несколько аккаунтов и логин не указан if (count($safetyPhones) > 1 && !$login) { $captcha->setNumber(); $error = 'Вы не указали логин. Поле обязательно для заполнения, т.к. номер телефона привязан к нескольким аккаунтам'; sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } // если номер не уникальный и указан логин if (count($safetyPhones) > 1 || $login) { foreach ($safetyPhones as $value) { if ($value['login'] == $login) { $safety = $value; break; } } if (!$safety) { $error = 'Этот логин и номер телефона не связаны. Попробуйте восстановить доступ через логин или email'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'phone login'); return $objResponse; } } if (count($safetyPhones) === 1 && !$login) { $safety = $safetyPhones[0]; } } // если указан логин и не указан номер if ($login && !$phone) { // проверяем существует ли пользователь с таким логином $user = new users(); $user->GetUser($login); if (!$user->uid) { $error = 'Вы указали некорректный логин'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } if ($user->is_banned) { $error = 'Аккаунт с указанным логином заблокирован или удален.\\nСожалеем, но восстановить пароль к нему в данный момент нельзя.'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } $safety = sbr_meta::findSafetyPhoneByLogin($login); if (!$safety) { $error = 'Этот логин не связан ни с одним номером телефона. Попробуйте восстановить доступ через логин или email'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } $phone = $safety['phone']; } $passwd = users::ResetPasswordSMS($safety['uid'], $phone); $sms_gate = new sms_gate_a1($phone); $sms_gate->sendSMS($sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)); if ($sms_gate->getHTTPCode() != 200) { $error = 'Ошибка отправки СМС на указанный номер'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum); return $objResponse; } $html = '<span class="b-icon b-icon_sbr_gattent"></span>На указанный вами номер выслан новый пароль для входа в систему.'; if (SMS_GATE_DEBUG) { $html .= ' <strong style="color:red">(DEBUG TEST: ' . $passwd . ')</strong>'; } $objResponse->script("\n \$('remind_button_phone').removeClass('b-button_rectangle_color_disable');\n \$('remind_phone_msg').addClass('b-layout__txt_hide');\n var e = new Element('div', {html: '{$html}', class: 'b-layout__txt b-layout__txt_padtop_15'});\n \$('sms_remind').getElement('table').destroy();\n \$('sms_remind').getElement('h3').grab(e, 'after');"); return $objResponse; }
function getsms($phone) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sms_gate_a1.php"; if ($_SESSION['send_sms_time'] > time()) { return; } $_SESSION['send_sms_time'] = strtotime("+" . sms_gate::TIMEOUT_SEND); // таймаут до следующей отсылки СМС if (!preg_match("/^\\+[0-9]{10,15}/mi", $phone)) { $sms = new sms_gate_a1($phone); $msg = $sms->getTextMessage(sms_gate::TYPE_ACTIVATE, $sms->generateCode()); $success = $sms->sendSMS($msg); if ($success) { $message = $sms->getLimitMessage($count); } else { $message = sms_gate::LIMIT_EXCEED_LINK_TEXT; $count = sms_gate::SMS_ON_NUMBER_PER_24_HOURS; } $_SESSION['send_sms_phone'] = $phone; $_SESSION['send_sms_code'] = $sms->getAuthCode(); $result = array('success' => true, 'message' => iconv("Windows-1251", "UTF-8//IGNORE", $message), 'count' => $count); if (SMS_GATE_DEBUG) { $result['c'] = $sms->getAuthCode(); } echo json_encode($result); return; } return; }