2ответ(ов) в теме
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
1
20:02
Версия WP-Recall: 16.1.5

Добавляю в стандартную форму регистрации wp-recall регистрацию по СМС.
1. в файл form-register.php добавил вывод строки ввода смс кода, после того, как будет заполнено поле "номер телефона":

 <?php if ($_REQUEST['user_tel'] !=null) { echo
        '<div class="form-block-rcl default-field"><input required type="number" placeholder="СМС код" value="" name="control_key" id="control_key"><span class="required">*</span></div>';} else {'';}; ?>

2. Далее в файл обработчик register.php добавил генерацию смс-кода, его отправку по СМС и проверку введённого кода пользователем:

 //генерация смс кода
$number = '4';
 $arr = array('0','1','2','3','4','5','6','7','8','9');
 $pass2 = "";
 for($i = 0; $i < $number; $i++)
 {
 $index = rand(0, count($arr) - 1);
 $pass2 .= $arr[$index];
 }
 $pass3 = $pass2;
//** отправляем СМС **//

// получаем смс код, введённый пользователем
$control_key = $_POST['control_key'];
//сравниваем смс код от пользователя и сгенерированный
if($control_key != $pass3){
        $wp_errors->add( 'rcl_register_empty', __('Введите код из СМС','wp-recall') );
        return $wp_errors;
    } 
    else if($control_key == $pass3) continue;

Проблема в том, что если пользователь код вводит неверно и жмёт кнопку "Зарегистрироваться" в форме регистрации, то идёт новая генерация кода. Необходимо же сгенерировать код только 1 раз (как это сделать?, пробовал ставить различный проверки на генерацию смс кода в зависимости от заполненности полей формы пользователем, так же пробовал код генерации с проверкой оборачивать в сессию - не помогло 🙁 ).
Кроме как записывать в БД сгенерированый код, и затем уже делать проверку у меня мысли нет. Может есть другое решение?

0
Андрей CS
не в сети 2 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16928
2
20:19

при генерации кода, прикреплять его к указанному пользователем телефону и писать это в БД, тогда при повторной попытке зарегистрироваться брать данные из БД и выводить ему этот код

1
Вы не имеете права на публикацию сообщений в этой теме