احراز شماره موبایل با SMS در PHP

احراز شماره موبایل با SMS و موبایل راهی سریع و موثر است که بطور کلی اکثرا در نرم افزار های موبایل و سیستم های بانکی برای فعال سازی پیامکی استفاده می شود.

بنابراین ما هم می توانیم در سیستم ورود و ثبت نام کاربر با تایید SMS ارسالی به کاربر حتی بدون استفاده از رمزعبور دائمی , احراز هویت با پبامک در PHP انجام بدیم.

در این آموزش PHP , قصد داریم به شما نحوه پیاده سازی تایید شماره موبایل با SMS در PHP که یک رمز یکبار مصرف (OTP) را ارسال می کند, به شما نشان بدیم.

 

ما از سرویس پنل پیامک (tanahost.ir) استفاده می کنیم. که در بخش وب سرویس (API) می توانیم نمونه کدها و داکیومنت را ببنیم.

توجه : بعضی از پنل های پیامکی امکان ارسال پیامک صوتی را هم دارند که خب مطمینا نرخ آنها بالاتر از SMS است.

مراحل زیر برای پیاده سازی تایید شماره موبایل با SMS در PHP دنبال خواهد شد.

  • ایجاد کد اعتبارسنجی تصادفی
  • ارسال کد OTP  به کاربر با استفاده از سرویس API پنل SMS و اضافه کردن آن به دیتابیس
  • تایید کد ارسال به شماره همراه کاربر و بروزرسانی وضعیت آن در دیتابیس
  • نمایش وضعیت اعتبارسنجی پیامکی به کابر

 

ساخت جداول دیتابیس

برای ذخیره کد یکبار مصرف (OTP) و اعتبارسنجی وضعیت, نیاز به ساخت یک جدول در دیتابیس MySQL داریم.

با کد SQL زیر می توانید جدول mobile_numbers به همراه چند ستون ابتدایی را ببینید.

کلاس اتصال به دیتابیس (DB.class.php)

کلاس DB تمام عملیات مربوط به (واکشی, قرار دادن و بروزرسانی) را مه مربوط به دیتابیس است انجام می دهد

<?php

class DB{
    private $dbHost     = "localhost";
    private $dbUsername = "root";
    private $dbPassword = "root";
    private $dbName     = "sms";
    private $tblName    = "mobile_numbers";
    
    public function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: " . $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
    
    /*
     * Returns rows from the database based on the conditions
     * @param string name of the table
     * @param array select, where, order_by, limit and return_type conditions
     */
    public function checkRow($conditions = array()){}
    
    /*
     * Insert data into the database
     * @param string name of the table
     * @param array the data for inserting into the table
     */
    public function insert($data){}
    
    /*
     * Update data into the database
     * @param string name of the table
     * @param array the data for updating into the table
     * @param array where condition on updating data
     */
    public function update($data,$conditions){}
}

 


توابع زیر برای fetch, insert, update اطلاعات OTP در دیتابیس استفاده شده اند.

  • تابع __construct() – اتصال و انتخاب دیتابیس
  • تابع checkRow() – بررسی می کند که آیا رکوردی مبنی بر شرط برقرار شده در جدول mobile_numbers وجود دارد یا خیر. اگر وجود داشته باشد true و در غیر اینصورت false را برگشت می دهد.
  • تابع Insert() – داده ها در در جدول mobile_numbers اضافه می کند.
  • تابع Update() – داده ها را بر اساس شرط, در جدول mobile_numbers بروزرسانی می کند.

فرم احراز شماره موبایل با SMS

در ابتدا یک فرم HTML نمایش داده می شود که به کاربر اجازه ارسال شماره موبایل را می دهد. بعد از وارد کردن شماره همراه, فیلد ورودی کدی که پیامک شده است برای کاربر نمایش داده می شود.

<!-- OTP Verification form -->
<!DOCTYPE>
<html>
<head>
    <title>parsprog Verification</title>
    <meta charset="UTF-8">
</head>
<body>
<form method="post" style="direction:rtl;">
    <label>شماره موبايل</label>
    <input type="text" placeholder="09123456789" name="mobile_no" value="<?php echo !empty($recipient_no)?$recipient_no:''; ?>" <?php echo ($otpDisplay == 1)?'readonly':''; ?>/>
    
    <?php if($otpDisplay == 1){ ?>
    <label>کد اعتبارسنجي</label>
    <input type="text" name="otp_code"/>
    <a href="javascript:void(0);" class="resend">ارسال مجدد</a>
    <?php } ?>
    <input type="submit" name="<?php echo ($otpDisplay == 1)?'submit_otp':'submit_mobile'; ?>" value="اعتبارسنجي"/>
</form>
</body>
</html>

 

 

ثبت و اعتبارسنجی کد اعتبارسنجی (OTP)

بعد از ارسال (submit) , شماره موبایل و رمزعبور یکبار مصرف توسط درگاه SMS در PHP اعتبارسنجی می شود.

  • تابع sendSMS() یک تابع سفارشی است که با آن به وب سرویس پنل پیامکی متصل و SMS را ارسال می کنیم. (آموزش ارسال SMS با PHP)
  • یک نمونه از کلاس DB را برای مدیریت عملیات مربوط به دیتابیس ایجاد می کنیم.

زمانی که شماره موبایل کاربر ثبت شد, عملیات زیر انجام می شود.

  • یک کد تصادفی برای اعتبارسنجی با تابع rand() در PHP ایجاد می شود.
  • از متد checkRow() از کلاس DB برای بررسی اینکه آیا شماره همراه قبلا در دیتابیس وجود دارد یا خیر استفاده می کنیم.
  • اگر موجود بود, فقط verification_code را در دیتابیس با متد update() در کلاس DB آپدیت می کنیم.
  • اگر شماره موبایل موجود نبود, داده های OTP را با متد insert() از کلاس DB , در دیتابیس اضافه می کنیم.
  • کد OTP را توسط تابع sendSMS() به شماره همراه کاربر ارسال می کنیم.
  • اگر ارسال پیامک به کاربر موفقیت آمیز بود, فیلد ورودی OTP فعال خواهید شد.

 

زمانی که کد توسط کاربر وارد و ارسال شد:

  • کد OTP وارد شده توسط کاربر را بررسی می کنیم که صحیح است یا خیر.
  • وضعیت اعتبار سنجی کاربر در دیتابیس (فیلد verified) را بروزرسانی می کنیم.
<?php
header("Content-Type: text/html; charset=utf-8");
require_once 'functions.php';
// Load and initialize database class
require_once 'DB.class.php';
$db = new DB();
        
$statusMsg = $receipient_no = '';
$otpDisplay = $verified = 0;
 
// If mobile number submitted by the user
if(isset($_POST['submit_mobile'])){
    if(!empty($_POST['mobile_no'])){
        // Recipient mobile number
        $recipient_no = $_POST['mobile_no'];
        
        // Generate random verification code
        $rand_no = rand(10000, 99999);
        
        // Check previous entry
        $conditions = array(
            'mobile_number' => $recipient_no,
        );
        $checkPrev = $db->checkRow($conditions);
        
        // Insert or update otp in the database
        if($checkPrev){
            $otpData = array(
                'verification_code' => $rand_no
            );
            $insert = $db->update($otpData, $conditions);
        }else{
            $otpData = array(
                'mobile_number' => $recipient_no,
                'verification_code' => $rand_no,
                'verified' => 0
            );
            $insert = $db->insert($otpData);
        }
        
        if($insert){
            // Send otp to user via SMS
            $message = 'OTP Code : '.$rand_no;
            $send = sendSMS( $recipient_no, $message);
            $otpDisplay = 1;
        }else{
            $statusMsg = array(
                'status' => 'error',
                'msg' => 'مشکلي در روند اجرا پيش آمد . بعد مجدد تلاش کتيد.'
            );
        }
    }else{
        $statusMsg = array(
            'status' => 'error',
            'msg' => 'لطفا شماره موبايل خود را وارد کنيد.'
        );
    }
    
// If verification code submitted by the user
}elseif(isset($_POST['submit_otp']) && !empty($_POST['otp_code'])){
    $otpDisplay = 1;
    $recipient_no = $_POST['mobile_no'];
    if(!empty($_POST['otp_code'])){
        $otp_code = $_POST['otp_code'];
        
        // Verify otp code
        $conditions = array(
            'mobile_number' => $recipient_no,
            'verification_code' => $otp_code
        );
        $check = $db->checkRow($conditions);
        
        if($check){
            $otpData = array(
                'verified' => 1
            );
            $update = $db->update($otpData, $conditions);
            
            $statusMsg = array(
                'status' => 'success',
                'msg' => 'ممنونم. شماره همراه شما با موفقيت تاييد شد.'
            );
            
            $verified = 1;
        }else{
            $statusMsg = array(
                'status' => 'error',
                'msg' => 'کد اعتبارسنجي اشتباه است . مجددا تلاش کنيد.'
            );
        }
    }else{
        $statusMsg = array(
            'status' => 'error',
            'msg' => 'لطفا کد اعتبارسنجي پيامک شده را وارد کنيد'
        );
    }
}
?>

 

 

وضعیت اعتبارسنجی

اگر شماره موبایل کاربر به موفقیت اعتبارسنجی شده باشد, پیام وضعیت زیر را نمایش می دهیم.

<!-- Display status message -->
<?php echo !empty($statusMsg)?'<p class="'.$statusMsg['status'].'">'.$statusMsg['msg'].'</p>':''; ?>
 
<?php if($verified == 1){ ?>
    <p>Mobile No: <?php echo $recipient_no; ?></p>
    <p>Verification Status: <b>Verified</b></p>
<?php } ?>

 

تایید شماره موبایل با SMS در PHP

امیدوارم از آموزش تایید شماره موبایل با SMS در PHP نهایت استفاده را برده باشید.

برای دانلود سورس کد کامل از باکس دانلود استفاده کنید.

هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید.

دانلود باکس
مطلب مفیدی برای شما بود ؟ پس به اشتراک بگذارید برای دوستانتان

مصطفی

38 مطلب منتشر شده

درباره این مطلب نظر دهید !