以下是详细的“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技术站