Laravel實現(xiàn)短信發(fā)送驗證碼注冊

前端代碼

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
    <title>Document</title>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-4 m-auto py-5">
            <form>
                <div class="form-group">
                    <label for="mobile">Mobile</label>
                    <input type="text" class="form-control" id="mobile" name="mobile" placeholder="Please mobile"/>
                </div>
                <div class="form-group">
                    <label for="verifyCode">Verification code</label>
                    <input type="password" class="form-control" id="verifyCode" name="verify_code"
                           placeholder="Please enter verification code">
                    <input type="button" class="btn btn-outline-primary btn-sm mt-2" id="getVerifyCode" value="Get Verification Code">
                </div>
                <button type="submit" class="btn btn-primary">Register</button>
            </form>
        </div>
    </div>
</div>
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
<script>
    var timeCount = 60;

    function setTime(obj){
        if(timeCount === 0){
            obj.attr('disabled',false);
            obj.val('Get Verification Code');
            timeCount = 60;
            return;
        }else{
            obj.attr('disabled',true);
            obj.val(`Get Verification Code again(${timeCount}s)`);
            timeCount --;
        }
        setTimeout(function(){
            setTime(obj);
        }, 1000);
    }

    $('#getVerifyCode').click(function(e){
        e.preventDefault();
        var mobile = parseInt($('input[name="mobile"]').val());
        if(!mobile){
            alert('Please enter mobile.');
            return;
        }
        var url = "{{route('sendcode')}}";
        getVerifyCode(mobile, url);
        setTime($(this));
    });

    function getVerifyCode(mobile, url){
        $.ajax({
            url: url,
            method: 'post',
            data: {mobile: mobile},
            headers: {
              'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            success: function(data){
                console.log(data);
            }
        })
    }
</script>
</body>
</html>

后端接口

路由:
Route::get("create", "SmsController@create")->name("create");//注冊表單
Route::get("register", "SmsController@register")->name("register");//注冊動作
Route::post("sendcode", "SmsController@sendcode")->name("sendcode");//發(fā)送驗證碼
控制器代碼:
public function sendcode(Request $request){
        $mobile = $request->input('mobile');
        $request->validate([
            'mobile' => ['required', 'regex:/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199)\d{8}$/']
        ]);
        // 驗證碼
        $code = mt_rand(1000, 9999);
        // 將驗證碼 存入session中
        $request->session()->put('verify_code', $code);
        // 設置驗證碼有效時間
        $time = 5;
        // 發(fā)送內容
        $content = urldecode("您的驗證碼為{$code},在{$time}分鐘內有效已添。");
        //發(fā)送
        $result = $this->sendMsg($mobile, $content);

        if ($result !== "0") {
            return response()->json(['code' => 0, 'msg' => '發(fā)送失敗']);
        } else {
            return response()->json(['code' => 1, "msg" => "發(fā)送成功"]);
        }
    }

    protected function sendMsg($mobile, $message){
        // 短信發(fā)送接口    這是用的短信寶的接口
        $username = "********";
        $password = md5("********");
        $url = "http://api.smsbao.com/sms?u={$username}&p={$password}&m={$mobile}&c={$message}";
        // 發(fā)送請求
        $result = $this->curlRequest($url);
        Log::debug($result);
        return $result;
    }
請求函數(shù):
// curl 發(fā)送http 請求
    private function curlRequest($url, $post='')
    {
        // 初始化
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');

        // post請求
        if($post) {
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
        }

        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        // 執(zhí)行請求
        $data = curl_exec($curl);
        if(curl_exec($curl) === false) {
            return 'Curl error: ' . curl_error($curl);
        } else {
            curl_close($curl);
            return $data;
        }
    }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末坠陈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剩岳,更是在濱河造成了極大的恐慌贞滨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍棕,死亡現(xiàn)場離奇詭異晓铆,居然都是意外死亡,警方通過查閱死者的電腦和手機绰播,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門骄噪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蠢箩,你說我怎么就攤上這事链蕊。” “怎么了谬泌?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵滔韵,是天一觀的道長。 經常有香客問我呵萨,道長奏属,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任潮峦,我火速辦了婚禮囱皿,結果婚禮上勇婴,老公的妹妹穿的比我還像新娘。我一直安慰自己嘱腥,他們只是感情好耕渴,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著齿兔,像睡著了一般橱脸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上分苇,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天添诉,我揣著相機與錄音,去河邊找鬼医寿。 笑死栏赴,一個胖子當著我的面吹牛,可吹牛的內容都是我干的靖秩。 我是一名探鬼主播须眷,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沟突!你這毒婦竟也來了花颗?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惠拭,失蹤者是張志新(化名)和其女友劉穎扩劝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求橄,經...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡今野,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罐农。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片条霜。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涵亏,靈堂內的尸體忽然破棺而出宰睡,到底是詐尸還是另有隱情,我是刑警寧澤气筋,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布拆内,位于F島的核電站,受9級特大地震影響宠默,放射性物質發(fā)生泄漏麸恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抹沪。 院中可真熱鬧刻肄,春花似錦、人聲如沸融欧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽噪馏。三九已至麦到,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欠肾,已是汗流浹背瓶颠。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留董济,地道東北人步清。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像虏肾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子欢搜,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容

  • 驗證碼常用于注冊場景炒瘟,用以防止惡意寫入數(shù)據(jù)吹埠。在簡單的注冊業(yè)務中,用戶填寫注冊信息后疮装,需要填寫驗證碼缘琅。后臺再根據(jù)各項...
    越大大雨天閱讀 5,651評論 1 2
  • 最早知道金星其人,是在很久之前魯豫寫的某本書上廓推,扉頁的彩色照片中的一張刷袍,好像是“在聚會上遇到金星用手機記下了她的...
    wenqianbaby閱讀 1,767評論 7 6
  • 今天是第十天更新。不知道寫點什么好樊展。干脆還是來聊聊阿婆的小說吧呻纹。《東方快車謀殺案》也是阿婆非常經典的一部小說...
    戒月半閱讀 1,356評論 0 0
  • 白駒過隙专缠,時光匆匆 有些過往如浮光掠影 都說舍得舍得雷酪,有舍才有得。 有些人或有些事是一抹暖意涝婉, 亮但不灼熱哥力;螢光但...
    厚積薄發(fā)ing閱讀 83評論 0 1