laravel5.4整合極驗驗證碼3.0

來自我的博客mcoo.me

  1. 注冊賬號
    注冊地址:http://www.geetest.com/
    注冊之后獲得最新的ID和KEY
    2·下載sdk
    把下載下來的sdk改名為geetest放入vendor文件下
    可以把geetest文件下的其他文件都刪除只保留lib文件

3·把lib下的class.geetestlib.php修改名稱為:GeetestLib.class.ph 修改GeetestLib類里的pre_process()方法

    public function pre_process($param, $new_captcha=1) {
        $data = array('gt'=>$this->captcha_id,
                     'new_captcha'=>$new_captcha
                );
        $data = array_merge($data,$param);//沒有修改的這里可能會報錯
        $query = http_build_query($data);
        $url = "http://api.geetest.com/register.php?" . $query;
        $challenge = $this->send_request($url);
        if (strlen($challenge) != 32) {
            $this->failback_process();
            return 0;
        }
        $this->success_process($challenge);
        return 1;
    }

改成

    public function pre_process($param, $new_captcha=1) {
        $data = array('gt'=>$this->captcha_id,
                     'new_captcha'=>$new_captcha
                );
        if (($param != null) and (is_string($param))) {
            $data['user_id'] = $param;
        }
        $query = http_build_query($data);
        $url = "http://api.geetest.com/register.php?" . $query;
        $challenge = $this->send_request($url);
        if (strlen($challenge) != 32) {
            $this->failback_process();
            return 0;
        }
        $this->success_process($challenge);
        return 1;
    }

4·在composer.json的autoload內(nèi)的classmap項新增類包,

    "autoload": {
        "classmap": [
            "database",
            "vendor/geetest"http://添加自己的
        ],
       
        "psr-4": {
            "App\\": "app/"
        }
    },

5·運行終端导饲,cd到項目路徑浆洗,使用composer命令

    composer dumpautoload 

然后就能在項目中愉快的使用GeetestLib類了域帐,簡單的用法如下:

    use GeetestLib;
    $GtSdk = new GeetestLib()

6·我是在config文件下新建了sys.php做配置文件方便以后在后臺修改

    /*驗證碼配置*/
    'GEE_ID'  =>  '4c65ff2cf2d4ac493e837a91215fff77',
    'GEE_KEY' =>  'e9fc13ecf1178f6a59c80f8f42e5773f',

7·在App\Http\Controllers 下創(chuàng)建Geetest控制器方法getVerify()


   namespace App\Http\Controllers;
   use GeetestLib;
   class GeetestController extends Controller
   {
       public function getVerify(){
           //實例化并傳入極驗id與key值
           $GtSdk = new GeetestLib(config('sys.GEE_ID'), config('sys.GEE_KEY'));
           $user_id = "web";
           $status = $GtSdk->pre_process($user_id);
           $data = array(
               'gtserver'=>$status,
               'user_id'=>$user_id
           );
           session(['geetest'=>$data]);
           echo $GtSdk->get_response_str();
       }
   }

創(chuàng)建路由

    Route::get('/getVerify', 'GeetestController@getVerify')->name('getVerify');

8·在頁面上處理

        @extends('layouts.app')

    @section('content')
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <!-- 引入封裝了failback的接口--initGeetest -->
    <script src="http://static.geetest.com/static/tools/gt.js"></script>
    <div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Login</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="POST" action="{{ route('login') }}">
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                            <label for="email" class="col-md-4 control-label">E-Mail Address</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required autofocus>

                                @if ($errors->has('email'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                            <label for="password" class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div id="embed-captcha"></div>
                        <p id="wait" class="show">正在加載驗證碼......</p>
                        <p id="notice" class="hide">請先拖動驗證碼到相應(yīng)位置</p>


                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <div class="checkbox">
                                    <label>
                                        <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}> Remember Me
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-8 col-md-offset-4">
                                <button type="submit" id="but" class="btn btn-primary" disabled>
                                    Login
                                </button>

                                <a class="btn btn-link" href="{{ route('password.request') }}">
                                    Forgot Your Password?
                                </a>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
    </div>
    <script>
        var handlerEmbed = function (captchaObj) {
            $("#embed-submit").click(function (e) {

                var validate = captchaObj.getValidate();
                if (!validate) {
                    $("#notice")[0].className = "show";
                    setTimeout(function () {
                        $("#notice")[0].className = "hide";

                    }, 2000);
                    e.preventDefault();
                }
            });
            // 將驗證碼加到id為captcha的元素里
            captchaObj.appendTo("#embed-captcha");
            captchaObj.onReady(function () {
                $("#wait")[0].className = "hide";
            });
            //驗證成功
            captchaObj.onSuccess(function () {
                $("#but").attr("disabled",false)
            });
            //驗證失敗
            captchaObj.onError(function () {
                $("#but").attr("disabled",true)
            });
            // 更多接口參考:http://www.geetest.com/install/sections/idx-client-sdk.html
        };
        $.ajax({
            // 獲取id,challenge杨拐,success(是否啟用failback)
            url: "{{ route('getVerify',array('t'=>time())) }}", // 加隨機(jī)數(shù)防止緩存
            type: "get",
            dataType: "json",
            success: function (data) {
                console.log(data)
                // 使用initGeetest接口
                // 參數(shù)1:配置參數(shù)
                // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象鸠补,之后可以使用它做appendTo之類的事件
                initGeetest({
                    gt: data.gt,
                    challenge: data.challenge,
                    product: "float", // 產(chǎn)品形式称勋,包括:float仓坞,embed捶枢,popup。注意只對PC版驗證碼有效
                    offline: !data.success // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī)空厌,一般不需要關(guān)注
                }, handlerEmbed);
            }
        });
    </script>
    @endsection

9·初始化完成之后的提交時前段會自動驗證钝诚,然后提交給后臺之后處理方法是:

    public function login()
    {
        $GtSdk = GeetestLib(config('sys.GEE_ID'), config('sys.GEE_KEY'));
        $geetest = session("geetest");
        $user_id = $geetest['user_id'];);
        if ($geetest['gtserver'] == 1) {
            $result = $GtSdk->success_validate($geetest_challenge, $geetest_validate, $geetest_seccode, $user_id);
            if ($result) {
                echo 'Yes!';
            } else{
                echo 'No';
            }
        }else{
           if ($GtSdk->fail_validate($geetest_challenge, $geetest_validate, $geetest_seccode)) {
                echo "yes";
            }else{
                echo "no";
            }
        }
    }

然后在頁面上就可以看到效果了颖御。


這里寫圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凝颇,隨后出現(xiàn)的幾起案子潘拱,更是在濱河造成了極大的恐慌,老刑警劉巖祈噪,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泽铛,死亡現(xiàn)場離奇詭異,居然都是意外死亡辑鲤,警方通過查閱死者的電腦和手機(jī)盔腔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來月褥,“玉大人弛随,你說我怎么就攤上這事∧啵” “怎么了舀透?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長决左。 經(jīng)常有香客問我愕够,道長,這世上最難降的妖魔是什么佛猛? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任惑芭,我火速辦了婚禮,結(jié)果婚禮上继找,老公的妹妹穿的比我還像新娘遂跟。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布幻锁。 她就那樣靜靜地躺著凯亮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哄尔。 梳的紋絲不亂的頭發(fā)上假消,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音岭接,去河邊找鬼置谦。 笑死,一個胖子當(dāng)著我的面吹牛亿傅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘟栖,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼葵擎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了半哟?” 一聲冷哼從身側(cè)響起酬滤,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寓涨,沒想到半個月后盯串,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡戒良,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年体捏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糯崎。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡几缭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沃呢,到底是詐尸還是另有隱情年栓,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布薄霜,位于F島的核電站某抓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惰瓜。R本人自食惡果不足惜否副,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸵熟。 院中可真熱鬧副编,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至队腐,卻和暖如春蚕捉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柴淘。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工迫淹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人为严。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓敛熬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親第股。 傳聞我的和親對象是個殘疾皇子应民,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容