极验3.0扩展使用

浏览:910 发布日期:2017/10/01 分类:ThinkPHP5专区
1cofing.php文件里配置'geetest' => [
        'captcha_id'  => '',
        'private_key' => '',
    ]
2控制器下新建极验api控制器,包含获取极验方法与验证极验方法。class Api
{
    /**
     * 获取验证信息
     * @param  Request $request [description]
     * @return [type]           [description]
     */
    public function getGeetestResponse(Request $request)
    {
        $GtSdk = new GeetestLib(\think\config::get('geetest.captcha_id'), \think\config::get('geetest.private_key'));
        $data = array(
            "user_id" => "test", # 网站用户id
            "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
            "ip_address" => $request->ip() # 请在此处传输用户请求验证时所携带的IP
        );
        $status = $GtSdk->pre_process($data, 1);
        Session::set('gtserver', $status);
        Session::set('user_id', $data['user_id']);
        echo $GtSdk->get_response_str();        
    }

    /**
     * 二次验证
     * @param  Request $request [description]
     * @return [type]           [description]
     */
    public function verifyGeetestRequest(Request $request)
    {
        $geetest_challenge = $request->param('geetest_challenge');
        $geetest_validate  = $request->param('geetest_validate');
        $geetest_seccode   = $request->param('geetest_seccode');
        $GtSdk = new GeetestLib(\think\config::get('geetest.captcha_id'), \think\config::get('geetest.private_key'));
        $data = array(
            "user_id"     => Session::get('user_id'), # 网站用户id
            "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
            "ip_address"  => $request->ip() # 请在此处传输用户请求验证时所携带的IP
        );
        if (Session::get('gtserver') == 1) {   //服务器正常
            $result = $GtSdk->success_validate($geetest_challenge, $geetest_validate, $geetest_seccode, $data);
            if ($result) {
                return true;
            } else{
                return false;
            }
        } else {  //服务器宕机,走failback模式
            if ($GtSdk->fail_validate($geetest_challenge,$geetest_validate,$geetest_seccode)) {
                return true;
            } else {
                return false;
            }
        }
    }    
}
3前端极验获取使用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的元素里,同时会有三个input的值:geetest_challenge, geetest_validate, geetest_seccode
        captchaObj.appendTo("#embed-captcha");
        captchaObj.onReady(function () {
            $("#wait")[0].className = "hide";
        });
        // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
    };
    $.ajax({
        // 获取id,challenge,success(是否启用failback)
        url: "/index/Api/getGeetestResponse/t=" + (new Date()).getTime(), // 加随机数防止缓存
        type: "get",
        dataType: "json",
        success: function (data) {
            console.log(data);
            // 使用initGeetest接口
            // 参数1:配置参数
            // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
            initGeetest({
                gt: data.gt,
                challenge: data.challenge,
                new_captcha: data.new_captcha,
                product: "embed", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
                offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注
                // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config
            }, handlerEmbed);
        },
        error : function() {
                    alert('fail');
                }
    });
4服务器接收提交并进行二次验证public function login(Request $request){
        if ($request->method() == 'POST') {
            $geetest = new Api();
            if (!$geetest->verifyGeetestRequest($request)) {
                echo '验证错误,请刷新后重试';
            } else {
                echo '成功';
            }
        } else {
            return $this->fetch();
        }
        
    }
以上为极验3.0使用方法
如果老铁还有疑问的话可以到http://www.bestmx.top/home/article/index/aid/26看看,直接下载demo进行测试。这个项目不复杂但也耗费点时间,到里面给个评论就可以了,谢谢。
最佳答案
评论( 相关
后面还有条评论,点击查看>>