/** * напоминание пароля через телефон и логин. * * @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; }
/** * Оплата выбранного сервиса и ответ пользователю об успехе или ошибке. */ public function processRequest() { if (!$this->_isValidated) { $this->validate(); } // Блокируем входящие запросы с данным ид., пока текущая операция не выполнится (см. self::_response()) $mcache = new memBuff(); $mkey = 'ifreepay.evtId' . $this->_request['evtId']; if ($mcache->get($mkey)) { $this->_errorif(TRUE, 'Предыдущий запрос в процессе обработки.'); } $mcache->set($mkey, 1, 60); $this->_oplock = $mkey; $op_id = 0; $dup = 0; $profit = floatval($this->_request['profit']); $currency_str = trim(strtoupper($this->_request['profitCurrency'])); // Внимание! Прежде чем менять текст описания операции, загляните в account::getSmsInfo() и sms_service::checkEvtId(). $descr = "SMS #{$this->_request['evtId']} с номера {$this->_request['phone']} ({$this->_request['country']})" . " на номер {$this->_request['serviceNumber']}, ID абонента {$this->_request['abonentId']}," . " оператор {$this->_request['operator']}, текст: {$this->_smsDecoded}, обработан {$this->_request['now']}," . " профит {$profit} {$currency_str}," . " номер попытки: " . intval($this->_request['retry']); // Для обработки повторных запросов (в случае сбоев на одной из сторон). if (intval($this->_request['retry']) > 0) { $dup = sms_services::checkEvtId($this->_request['evtId'], $op_id); } switch ($this->_type) { case 1: if (!$dup && $operator != 'i-Free') { $this->GetInfo($this->_user->uid); $this->_errorif(!$this->id, 'Счет пользователя не открыт.'); $error = $this->deposit($op_id, $this->id, $this->_tariff['fm_sum'], $descr, self::PAYMENT_SYS, $this->_tariff['usd_sum'], $this->_opcode); $this->_errorif(!!$error, $error); } $res_text = "Ваш счет пополнен на {$this->_tariff['fm_sum']} FM"; case 2: $new_password = users::ResetPasswordSMS($this->_user->uid, $this->_request['phone']); $this->_errorif(!$new_password, "Неверный логин или телефон не привязан к аккаунту."); if (!$dup) { $this->_errorif(!($tr_id = $this->start_transaction($this->_user->uid)), "Ошибка при проведении операции по счету."); $this->_errorif($this->BuyFromSMS($op_id, $tr_id, $this->_opcode, $this->_user->uid, $descr, '', $this->_tariff['usd_sum'], 1, self::PAYMENT_SYS), "Ошибка при проведении денежной операции."); } $res_text = "Ваш новый пароль: {$new_password}"; case 3: if (!$dup) { $answers = new projects_offers_answers(); $this->_errorif(!$answers->AddPayAnswers($this->_user->uid, 1), "Ошибка добавления ответа."); $this->_errorif(!($tr_id = $this->start_transaction($this->_user->uid)), "Ошибка при проведении операции по счету."); $this->_errorif($this->BuyFromSMS($op_id, $tr_id, $this->_opcode, $this->_user->uid, $descr, '', $this->_tariff['usd_sum'], 1, self::PAYMENT_SYS), "Ошибка при проведении денежной операции."); } $res_text = 'Спасибо за покупку. Теперь вы можете ответить на проект.'; default: $this->_errorif(true, "Тип услуги не найден."); } if (!$dup || $dup == sms_services::DUP_OP_NOTSAVED) { $sms_opid = sms_services::saveEvtId($op_id, $profit, $currency_str, $this->_request['evtId']); } $this->_response($res_text); }
/** * Забыли пароль. Телефон. * * @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(); }