Bulgarian (Български) translation by Radoslav Ivanov (you can also view the original English article)

Въведение
В предишния епизод, писах как да подготвите вашето приложение, за да използва SMS посредством Twilio, често използвана услуга за текстови услуги. В днешния урок, ще ви покажа как да верифицирате потребителския телефонен номер, преди да изпрати огромен обем от текстови съобщения, вдигайки разходите ви.
Преди да започнем, искам да ви насърча да публикувате въпроси и обратна връзка в коментарите. Ако искате да сте информирани за бъдещи мои Envato Tuts+ уроци и други поредици от уроци, моля, посетете страницата ми като инструктор или ме последвайте на @lookahead_io.
Описание на Процеса
След като потребителят ни предостави неговия телефонен номер, ние искаме да изпълним няколко прости стъпки:
- Генериране на уникален четирицифрен код.
- Записваме неговия телефонен номер и четирицифрения код в нашата база данни (или криптираме кода локално, и го поставяме като променлива в скрито поле във формата на страницата).
- Изпращаме SMS до неверифицирания номер с четирицифрения код.
- Визуализираме форма, в която потребителя трябва да напише кода, който е получил.
- Проверяваме дали кодовете съвпадат.
- Обозначаваме телефония номер като верифициран в базата данни.
Контактната Страница на Потребителя
В Meeting Planner, всеки потребител може да добави няколко метода за контакт, например Skype, телефон и т.н. Всеки телефонен номер трябва да бъде верифициран, за да използва SMS нотификации.
Третият ред по-долу показва чекбокс, където потребителите могат да кликнат, за да подадат заявка за верификация:

Кликването прехвърля потребителя към actionVerify()
контролера по-долу; имайте предвид, че това ги отвежда до else
блока първоначално, защото все още не са изпратили кода:
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()
проверява дали са искали кодове многократно или прекалено често:
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()
:
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)])); }
Това прави следното:
- Генерира произволeн четири цифрен код.
- Това записва последния момент във времето (unix секунди), в което е направено искането за проверка.
- Това увеличава стойноста на опитите за проверка на този номер.
- И записва всичко това в базата данни.
- След това го изпраща като SMS с кода, който прилича на изображението по-долу.

След искането на кода, записването в базата данни и изпращането на кода до потребителя, зареждаме следната форма, в която искаме четирицифрения код:

Верифициране на Кода
Когато потребителят се опита да изпрати код, той работи в горната част на actionVerify()
:
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 { ... } }
Това проверява, дали кодовете съвпадат. Ако съвпадат, базата данни се актуализира и номера се отбелязва като верифициран. И това казва на потребителя:

Ако не, се визуализира съобщение за грешка:

Пробвайте го Сами
Ако искате да видите това в действие, можете да се регистрирате в Simple Planner или Meeting Planner (което е лесно със социален профил от Facebook или Google) и да добавите телефонен номер. След това кликнете върху отметката в списъка, който ще видите. Това е всичко.
Обобщение
Очевидно, ако приложението ви изпраща множество текстови съобщения, това би бил един забележителен разход за бизнеса ви и поради тази причина бихте желали да ограничите злоупотребите. Това започва с изграждането на защитна стена срещу невалидните номера - или валидни, но всъщност не притежавани от измамника.
Надявам се сте намерили това за полезно. Ако имате някакви въпроси или предложения, моля публикувайте ги в коментарите. Ако искате да сте информирани за бъдещи мои Envato Tuts+ уроци и други серии от уроци, моля, посетете страницата ми като инструктор или ме последвайте на @lookahead_io. Определено вижте и моите стартъп серии и Meeting Planner.
Сродни Линкове
Envato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post