Статьи

Как проверить номер телефона с помощью SMS

Конечный продукт
Что вы будете создавать

В предыдущем эпизоде ​​я писал о подготовке вашего приложения для SMS с использованием широко используемого сервиса текстовых сообщений Twilio. В сегодняшнем уроке я покажу вам, как проверять телефонные номера пользователей перед передачей большого объема текстов и повышением ваших расходов.

Прежде чем мы начнем, я хочу призвать вас оставлять вопросы и отзывы в комментариях. Если вы хотите следить за моими будущими учебниками Envato Tuts + и другими сериями, пожалуйста, посетите мою страницу инструктора или следуйте @lookahead_io .

После того, как пользователь предоставит свой номер телефона, мы хотим выполнить несколько простых шагов:

  • Генерация уникального четырехзначного кода.
  • Сохраните их номер ячейки и четырехзначный код в нашей базе данных ( или зашифруйте код локально как скрытую переменную формы на странице ).
  • Отправьте текст на непроверенный номер с четырехзначным кодом.
  • Отобразите форму с просьбой предоставить полученный код.
  • Убедитесь, что коды совпадают.
  • Укажите номер, который подтвержден в базе данных.

В Планировщике собраний каждый пользователь может добавить несколько методов контакта, например, Skype, телефон и т. Д. Каждый номер ячейки должен быть проверен для использования в SMS-уведомлениях.

Третья строка ниже показывает флажок, который они могут щелкнуть, чтобы запросить подтверждение:

Как проверить номер телефона с помощью SMS - список контактов

Нажатие на которое переводит пользователя в actionVerify() ниже; обратите внимание, что сначала они переносятся в блок else потому что они еще не отправили код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
public function actionVerify($id)
{
    $model = $this->findModel($id);
    if ($model->load(Yii::$app->request->post())) {
    …
    } else {
      $canRequest = $model->canRequest();
      if ($canRequest) {
        // send a text to this number
        $model->requestCode();
        return $this->render(‘verify’, [
            ‘model’ => $model,
        ]);
      } else {
        Yii::$app->getSession()->setFlash(‘error’, $canRequest);
        return $this->redirect([‘/user-contact’]);
      }
    }
}

Метод canRequest() проверяет, запрашивали ли они коды повторно или слишком часто:

01
02
03
04
05
06
07
08
09
10
11
public function canRequest() {
   if ($this->request_count<UserContact::MAX_REQUEST_COUNT) {
     if (time() — $this->requested_at>=60) {
       return true;
     } else {
         return Yii::t(‘frontend’,’Sorry, you must wait a minute between requests.’);
     }
   } else {
     return Yii::t(‘frontend’,’You have exceeded the maximum number of attempts.’);
   }
 }

Я заставляю их ждать минуту между попытками уменьшить злоупотребления.

Если разрешено, он вызывает requestCode() :

1
2
3
4
5
6
7
8
9
public function requestCode() {
   $this->verify_code = rand(0,9999);
   $this->requested_at = time();
   $this->request_count+=1;
   $this->update();
   $sms = new Sms;
   $sms->transmit($this->info,Yii::t(‘frontend’,
       ‘Please return to the site and type in {code}’,[‘code’=>sprintf(«%04d»,$this->verify_code)]));
 }

Это делает следующее:

  • Создает случайный четырехзначный код.
  • Он записывает последний момент времени (в секундах Unix), когда был сделан запрос на проверку.
  • Увеличивает количество попыток проверки этого номера.
  • И все это хранится в базе данных.
  • Затем он передает текст с кодом, похожим на изображение ниже.
Как проверить номер телефона с помощью SMS - текстовое сообщение с кодом подтверждения

После запроса кода, сохранения его в базе данных за кулисами и передачи кода пользователю, он загружает следующую форму с запросом кода:

Как проверить номер телефона с помощью SMS - Подтвердите контактную форму, запрашивая код

Когда пользователь пытается отправить код, он запускает верхнюю часть actionVerify() :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
public function actionVerify($id)
{
    $model = $this->findModel($id);
    if ($model->load(Yii::$app->request->post())) {
        // display verification form
        $model->verify = Yii::$app->request->post()[‘UserContact’][‘verify’];
        if (strval($model->verify_code) == strval($model->verify)) {
          $model->status = UserContact::STATUS_VERIFIED;
          $model->update();
          Yii::$app->getSession()->setFlash(‘success’,Yii::t(‘frontend’,’Thank you, your number is confirmed.’));
          return $this->redirect([‘/user-contact’]);
        } else {
            Yii::$app->getSession()->setFlash(‘error’, Yii::t(‘frontend’,’Sorry, that is incorrect. Please request a new code.’));
            return $this->redirect([‘/user-contact’]);
        }
    } else {
      …
    }
}

Проверяет, совпадают ли коды. Если они это сделают, он обновляет базу данных, чтобы отразить число было проверено. И это говорит пользователю:

Как проверить номер телефона с помощью SMS - Уведомление об успешном подтверждении

Если нет, отображается сообщение об ошибке:

Как проверить номер телефона с помощью SMS - ошибка, повторите попытку через минуту

Если вы хотите увидеть это в действии, вы можете зарегистрироваться в Simple Planner или Meeting Planner (что легко с социальной учетной записью, такой как Facebook или Google) и добавить номер телефона . Затем нажмите на галочку в списке, который вы увидите. Вот и все.

Очевидно, что если ваше приложение отправляет много текстовых сообщений, это ощутимая стоимость бизнеса, и вы хотите ограничить злоупотребления. Это начинается с настройки брандмауэра против недопустимых номеров или действительных номеров, которые фактически не принадлежат самозванцу.

Я надеюсь, что вы нашли это полезным. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте их в комментариях. Если вы хотите следить за моими будущими учебниками Envato Tuts + и другими сериями, пожалуйста, посетите мою страницу инструктора или следуйте @lookahead_io . Обязательно посмотрите мою серию стартапов и Планировщик собраний .