'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进行测试。这个项目不复杂但也耗费点时间,到里面给个评论就可以了,谢谢。
最佳答案