现在验证码的种类样式特别的多,最近比较流行滑块拼图验证码,下面我们就通过Geetset来实现滑块拼图验证码。
效果如图所示:点击提交之后,就会显示出来滑块验证!
1、首先去 http://www.geetest.com 注册账号,分别获取网页版与移动端的ID与KEY.
2、通过git命令获取github上最新的php版本的sdk。最新版:https://github.com/GeeTeam/gt3-php-sdk.git
3、将核心sdk类(lib/lass.geetestlib.php)放置到项目中
4、通过define来配置网页端与移动端的ID与KEY。
5、前端引入说明。
①引入初始化函数
<script src="static/gt.js"></script>
②通过div的id指定验证码要显示的位置
<div id="popup-captcha"></div>
③通过ajax先进行初始化验证(通过failback的接口initGeetest方法),执行回调函数handlerEmbed。
$.ajax({ // 获取id,challenge,success(是否启用failback) url: "web/StartCaptchaServlet.php?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: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效 offline: !data.success, // 表示用户后台检测极验服务器是否宕机,一般不需要关注 width: '100%', // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config }, handlerEmbed); } });
④点击弹出验证码,并通过ajax对验证后进行二次验证(验证码验证)。
var handlerEmbed = function (captchaObj) { $("#popup-submit").click(function (e) { var username = $("#username").val(); var password = $("#password").val(); var validate = captchaObj.getValidate(); if (!validate) { $("#notice")[0].className = "show"; setTimeout(function () { $("#notice")[0].className = "hide"; }, 2000); e.preventDefault(); } // 提交验证码信息,比如登陆页面,你需要提交登陆信息,用户名和密码等登陆数据 $.ajax({ url: "web/VerifyLoginServlet.php", type: "post", dataType: "json", data: { // 用户名和密码等其他数据,自己获取,不做演示 username:username, password:password, // 验证码数据,这些数据不用自己获取 // 这是二次验证所需的三个值 // 当然,你也可以直接设置验证码单独校验,省略其他信息 geetest_challenge: validate.geetest_challenge, geetest_validate: validate.geetest_validate, geetest_seccode: validate.geetest_seccode, }, // 这里是正确返回处理结果的处理函数 // 假设你就返回了1,2,3 // 当然,正常情况是返回JSON数据 success: function (data) { if (data && (data.status == 1)) { $(document.body).html('<h1>验证码验证失败!</h1>'); } else if(data && (data.status == 2)){ $(document.body).html('<h1>登陆成功!!</h1>'); } else if(data && (data.status == 3)){ $(document.body).html('<h1>用户名或密码错误!</h1>'); }else{ $(document.body).html('<h1>登陆错误!</h1>'); } } }); }); // 将验证码加到id为captcha的元素里,同时会有三个input的值:geetest_challenge, geetest_validate, geetest_seccode captchaObj.appendTo("#popup-captcha"); captchaObj.onReady(function () { $("#wait")[0].className = "hide"; }); // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html };
6.后台初始化验证示例代码。
方法说明:
GeetestLib($captcha_id, $private_key): 构造函数
pre_process($user_id=null) : 预处理接口
get_response_str() : 获取预处理结果的接口
require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php'; require_once dirname(dirname(__FILE__)) . '/config/config.php'; $GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY); session_start(); $data = array( "user_id" => "test", # 网站用户id "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 "ip_address" => "127.0.0.1" # 请在此处传输用户请求验证时所携带的IP ); $status = $GtSdk->pre_process($data, 1); $_SESSION['gtserver'] = $status; $_SESSION['user_id'] = $data['user_id']; echo $GtSdk->get_response_str();
7.二次验证示例代码(验证码校验)。
方法说明:
success_validate($challenge, $validate, $seccode, $user_id=null) : 极验服务器状态正常的二次验证接口
fail_validate($challenge, $validate) : 极验服务器状态宕机的二次验证接口
返回说明:
status为success为成功,status为fail为失败,供前端判断使用。
require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php'; require_once dirname(dirname(__FILE__)) . '/config/config.php'; session_start(); $GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY); $data = array( "user_id" => $_SESSION['user_id'], # 网站用户id "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 "ip_address" => "127.0.0.1" # 请在此处传输用户请求验证时所携带的IP ); // 比如你设置了一个验证码是否验证通过的标识 $code_flag=false; if ($_SESSION['gtserver'] == 1) { //服务器正常 $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data); if ($result) { // 验证码验证成功 $code_flag=true; } }else{ //服务器宕机,走failback模式 if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) { // 验证码验证成功 $code_flag=true; } } // 如果验证码验证成功,再进行其他校验 if($code_flag){ if($_REQUEST['username'] == 'admin' && $_REQUEST['password'] == '123456'){ echo json_encode(array('status'=>2)); }else{ echo json_encode(array('status'=>3)); } }else{ // 验证码验证失败,返回1,这里和上面相呼应,当然我的项目没有简单的返回1,而是返回了JSON数据 echo json_encode(array('status'=>1)); } exit;
demo示例:链接:http://pan.baidu.com/s/1kUXUuDh 密码:dygd
更多内容,查看官方文档:http://docs.geetest.com/install/overview/
官方git示例代码:https://github.com/GeeTeam/gt3-php-sdk
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn