Example #1
0
/**
 * напоминание пароля через телефон и логин.
 *
 * @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;
}
Example #2
0
 /**
  * Оплата выбранного сервиса и ответ пользователю об успехе или ошибке.
  */
 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);
 }
Example #3
0
 /**
  * Забыли пароль. Телефон.
  * 
  * @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();
 }