PHP 极验验证码实例讲解


Posted in PHP onSeptember 29, 2016

你能找到这篇文章,说明你对极验验证已经不是完全陌生的了,所有废话我就不多说了,直接开始表说如何使用它,不过在此之前呢,先粘贴几个你可能会用得到的网址:

官网:http://www.geetest.com/

官方文档:http://www.geetest.com/install/sections/idx-basic-introduction.html

github:https://github.com/GeeTeam/gt-php-sdk.git

如何使用:

首先要确认前端使用页面,比如登陆页面

<script src="http://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="http://static.geetest.com/static/tools/gt.js"></script> 
 

1.在登陆页面访问引入类库:

如果您的网站使用https,则只需要将引入极验库的地方换成https协议即可,不需要更改其它地方。例如更换成以下代码即可:

<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://static.geetest.com/static/tools/gt.js"></script>

2.初始化前端

下面的代码需要在页面加载后就执行,如果你使用jQuery,可以写在$(function(){});内

$.ajax({
  // 获取id,challenge,success(是否启用failback)
  url: "../web/StartCaptchaServlet.php?t=" + (new Date()).getTime(), // 加随机数防止缓存
  type: "get",
  dataType: "json",
  success: function (data) {
    // 使用initGeetest接口
    // 参数1:配置参数
    // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
    initGeetest({
      gt: data.gt,
      challenge: data.challenge,
      product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
      offline: !data.success // 表示用户后台检测极验服务器是否宕机,与SDK配合,用户一般不需要关注
    }, handlerPopup);
  }
});

上面代码的意思是说,页面加载后,需要到你指定的URL地址上获得验证码信息,至于上面的URL地址“../web/StartCaptchaServlet.php”里面写了什么内容,这个我们在服务器端代码部署会详细说明。

但是需要说明的是,上面的代码里有一个回调函数叫“handlerPopup”,这个函数是你需要验证码的真正初始化代码:如下:

// 代码详细说明
var handlerPopup = function (captchaObj) {
  // 注册提交按钮事件,比如在登陆页面的登陆按钮
  $("#popup-submit").click(function () {
    // 此处省略在登陆界面中,获取登陆数据的一些步骤
    
    // 先校验是否点击了验证码
    var validate = captchaObj.getValidate();
    if (!validate) {
      alert('请先完成验证!');
      return;
    }
    // 提交验证码信息,比如登陆页面,你需要提交登陆信息,用户名和密码等登陆数据
    $.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 (result) {
        // 1表示验证码验证失败
        if (result == "1") {
          alert("验证码验证失败!");
        }else if (result == "2") {
          alert("用户名或密码错误!");
        }else if (result == "3") {
          alert("登陆成功!");
          // 登陆成功了,可以在这里做其他处理
        }else{
          alert("登陆错误!");
        }
      }
    });
  });
  // 弹出式需要绑定触发验证码弹出按钮
  // 比如在登陆页面,这个触发按钮就是登陆按钮
  captchaObj.bindOn("#popup-submit");
   
  // 将验证码加到id为captcha的元素里
  // 验证码将会在下面指定的元素中显示出来
  captchaObj.appendTo("#popup-captcha");
   
  // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
};

至此,前端的所有设置都写完了,官方的说明文档:http://www.geetest.com/install/sections/idx-client-sdk.html

 3.服务器端部署(PHP) 

在第一步中,我们设置了一个这样的地址“../web/StartCaptchaServlet.php”,在这个地址里边写什么呢:

<?php
// 引入文件
require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php';
require_once dirname(dirname(__FILE__)) . '/config/config.php';
// 实例化,实例化的参数在config中配置,分别是:验证ID 和 验证Key,如何获取下面会说。
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
session_start();
// 这个是用户的标识,或者说是给极验服务器区分的标识,如果你项目没有预先设置,可以像下面这样设置:
if(!isset($_SESSION['user_id'])){
  $_SESSION['user_id']=uniqid();// 生成一个唯一ID
}
$user_id = $_SESSION['user_id'];
// 或者,你就直接写成:
// $user_id = "test";
 
// 生成验证码信息,并返回给客户端
$status = $GtSdk->pre_process($user_id);
$_SESSION['gtserver'] = $status;
$_SESSION['user_id'] = $user_id;
echo $GtSdk->get_response_str();
?>

如何获取 验证ID 和 验证Key :

1.从 验证后台 注册账号
2.添加验证,可以获取一组当前验证的ID/Key
3.将ID和Key分别替换到config.php文件中的captcha_id/private_key变量的值 

4.点击提交按钮之后的服务端校验(二次验证)

比如上面说的,用户登录时,你把用户名和密码和验证码信息都提交到服务器了,这个时候,你就可以做校验了:

<?php
// 引入文件
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);
 
// 比如你设置了一个验证码是否验证通过的标识
$code_flag=false;
 
// 这里获取你之前设置的user_id,传送给极验服务器做校验
$user_id = $_SESSION['user_id'];
if ($_SESSION['gtserver'] == 1) {
  $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $user_id);
  if ($result) {
    // 验证码验证成功
    $code_flag=true;
  }
}else{
  if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) {
     // 验证码验证成功
    $code_flag=true;
  }
}
 
// 如果验证码验证成功,再进行其他校验
if($code_flag){
  // 其他验证操作
  // 用户名不对时,返回2,其他错误返回3,等等。。。。
}else{
  // 验证码验证失败,返回1,这里和上面相呼应,当然我的项目没有简单的返回1,而是返回了JSON数据
  echo 1;
  exit(-1);
}
?>

感谢你的阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
php include的妙用,实现路径加密
Jul 29 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
Jun 22 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
php版微信发红包接口用法示例
Sep 23 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
Oct 17 PHP
php自定义函数转换html标签示例
Sep 29 #PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 #PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 #PHP
分享一个漂亮的php验证码类
Sep 29 #PHP
你不知道的文件上传漏洞php代码分析
Sep 29 #PHP
PHP的Json中文处理解决方案
Sep 29 #PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 #PHP
You might like
中国收音机工业发展史
2021/03/02 无线电
PHP对字符串的递增运算分析
2010/08/08 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
vuex实现购物车功能
2020/06/28 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
python根据京东商品url获取产品价格
2015/08/09 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
4s店机修工岗位职责
2013/12/20 职场文书
班级德育工作实施方案
2014/02/21 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
初中语文教学随笔
2015/08/15 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
导游词之阆中古城
2019/12/23 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
Python pyecharts绘制条形图详解
2022/04/02 Python
Python实现为PDF去除水印的示例代码
2022/04/03 Python