thinkphp整合系列之极验滑动验证码geetest功能

以下是详细的“thinkphp整合系列之极验滑动验证码geetest功能”的完整攻略:

1. 引入SDK

首先,需要将极验官网提供的验证码 SDK 文件夹拷贝到工程目录下。在 thinkphp 中,可以将 SDK 文件夹放到项目的 vendor 目录下。

在控制器中引入 SDK:

require_once './vendor/geetest-sdk/class.geetestlib.php';
require_once './vendor/geetest-sdk/class.geetestmanage.php';

2. 获取极验验证的状态

极验验证成功后会返回一个标识符,应用程序需要验证这个标识符的有效性。可以通过调用 validate($gt_challenge, $gt_validate, $gt_seccode) 函数来验证:

$geetest = new GeetestLib($captcha_id, $private_key);
if ($geetest->validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'])) {
    // 验证码正确
} else {
    // 验证码错误
}

其中 $captcha_id 和 $private_key 分别是在极验官网申请的公钥和私钥。

3. 显示验证码

在前端页面中,通过调用极验 SDK 的 initGeetest 函数显示验证码:

$.ajax({
  url: 'index.php?m=user&a=geetest',
  type: 'get',
  dataType: 'json',
  success: function (data) {
    initGeetest({
      gt: data.gt,
      challenge: data.challenge,
      new_captcha: data.new_captcha,
      product: 'float',
      width: '100%',
      offline: !data.success
    }, handler);
  }
});

其中 index.php?m=user&a=geetest 是服务器上的一个处理验证码的接口。

示例一:在注册页面中使用验证码

在注册页面中,可以通过如下方式显示验证码:

<div id="captcha"></div>
<input type="text" name="geetest_challenge">
<input type="text" name="geetest_validate">
<input type="text" name="geetest_seccode">

然后通过如下代码在服务器端生成验证码:

public function geetest()
{
    $captcha_id = 'xxxx';
    $private_key = 'xxxx';

    $geetest = new GeetestLib($captcha_id, $private_key);
    $status = $geetest->pre_process();

    session_start();
    $_SESSION['geetest'] = array(
        'gt_server_status' => $status,
        'gt_challenge' => $geetest->get_challenge(),
        'gt_validate' => $geetest->get_validate(),
        'gt_seccode' => $geetest->get_seccode(),
    );
    echo json_encode($geetest->get_response());
}

其中 $captcha_id 和 $private_key 是在极验官网申请的公钥和私钥。

在提交表单时,可以通过 PHP 代码验证验证码的正确性:

$geetest = new GeetestLib($captcha_id, $private_key);
if ($geetest->validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'])) {
    // 验证码正确,将数据保存到数据库
} else {
    // 验证码错误,返回错误提示
}

示例二:在登录页面中使用验证码

在登录页面中,可以使用如下方式显示验证码:

<label>验证码:</label>
<input type="text" name="geetest_challenge">
<input type="text" name="geetest_validate">
<input type="text" name="geetest_seccode">
<div id="captcha"></div>

然后通过如下代码在服务器端生成验证码:

public function geetest()
{
    $captcha_id = 'xxxx';
    $private_key = 'xxxx';

    $geetest = new GeetestLib($captcha_id, $private_key);
    $status = $geetest->pre_process();

    session_start();
    $_SESSION['geetest'] = array(
        'gt_server_status' => $status,
        'gt_challenge' => $geetest->get_challenge(),
        'gt_validate' => $geetest->get_validate(),
        'gt_seccode' => $geetest->get_seccode(),
    );
    echo json_encode($geetest->get_response());
}

然后在提交表单的时候,可以调用 validate 函数验证验证码的正确性:

$geetest = new GeetestLib($captcha_id, $private_key);
if ($geetest->validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'])) {
    // 验证码正确,完成登录
} else {
    // 验证码错误,返回错误提示
}

至此,我们完成了在 thinkphp 中使用极验滑动验证码的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:thinkphp整合系列之极验滑动验证码geetest功能 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Script的加载方法小结

    那么让我来详细讲解Script的加载方法小结。 Script的加载方法小结 直接加载Script文件 可以使用script标签来直接加载一个外部的JavaScript文件。 <script src="path/to/script.js"></script> 这种方式最简单,也是最常见的加载方式。但它也有一些缺点,比…

    JavaScript 2023年5月27日
    00
  • jscript与vbscript 操作XML元素属性的代码

    为了操作 XML 元素属性,我们需要使用 XML DOM 对象。在 JavaScript 中,我们可以使用 jscript 或者 vbscript 来访问和操作 XML DOM。 XML DOM 对象是一个树结构,由节点组成。每个节点都有一个节点类型,例如元素节点、属性节点、文本节点等。我们可以通过节点的属性和方法来访问和操作节点的内容。 下面是使用 jsc…

    JavaScript 2023年6月10日
    00
  • JS及JQuery对Html内容编码,Html转义

    JS及JQuery对Html内容编码,Html转义是为了防止用户提交的数据中包含恶意代码,而对HTML标签中的一些字符进行转义的过程。下面我将分别对JS和JQuery方式进行详细讲解。 1. JS对Html内容编码 在JS中,可以使用 encodeURI 函数来对Url编码,使用encodeURIComponent函数对Url参数进行编码, 使用escape…

    JavaScript 2023年5月19日
    00
  • BOM之navigator对象和用户代理检测

    BOM指的是浏览器对象模型(Browser Object Model),是由浏览器厂商提供的一组API接口,用于JavaScript与浏览器交互,包括DOM、window对象、navigator对象等。其中,navigator对象用于获取有关浏览器的信息,用户代理检测可以通过这个对象获取当前浏览器的信息。 navigator对象 navigator对象提供了…

    JavaScript 2023年6月10日
    00
  • js正则表达式简单校验方法

    首先我们需要了解什么是正则表达式,正则表达式一般用于字符串的处理和匹配,可以用来进行字符串的查找、替换、分割等操作。在JavaScript中,可以通过RegExp对象来创建正则表达式。 接下来,我将详细讲解“js正则表达式简单校验方法”的完整攻略: 1. 创建正则表达式对象 在使用正则表达式之前,需要先创建一个正则表达式对象,可以使用字面量或者构造函数来创建…

    JavaScript 2023年6月10日
    00
  • jQuery ajax(复习)—Baidu ajax request分离版

    下面是 “jQuery ajax(复习)—Baidu ajax request分离版”的完整攻略。 简介 本篇攻略主要介绍如何使用jQuery发起Ajax请求,以及如何使用Baidu Ajax Request分离版优化你的Ajax请求。 Ajax基础 什么是Ajax? Ajax全称是 Asynchronous JavaScript and XML(异步的 J…

    JavaScript 2023年6月11日
    00
  • JavaScript用document.write()输出换行的示例代码

    下面是JavaScript用document.write()输出换行的示例代码的完整攻略: 1. document.write()方法 document.write()是JavaScript中用于向HTML文档中输出内容的方法,我们可以使用它来向网页中动态添加内容。document.write()方法可以接受任何有效的HTML或JavaScript代码,系统…

    JavaScript 2023年5月28日
    00
  • js常用方法示例梳理(总结篇)

    JS常用方法示例梳理是一篇总结JS中常用方法的文章,在其中作者按照方法的特点进行了分类,并给出了对应的方法示例,以帮助读者快速掌握JS中常用方法的应用。 本篇文章将详细讲解每一个分类下的常用方法,以及这些方法的使用场景和示例。 字符串相关方法 在这一部分中,文章总结了一系列字符串相关的方法,包括字符串查找、替换、分割等。 查找方法:indexOf、lastI…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部