修改config/hooks.php
//注册成功之前
\Phpcmf\Hooks::on('member_register_before', function ($post) {
$cname = 'xzyz'; // 对应极验别名 xzyz 替换别名
$captcha_id = dr_geetest($cname, 2);
if (!$post['captcha_id']) {
//(这里不要修改提示文字,这个有和前端交互)**
\Phpcmf\Service::C()->_json(0, dr_lang('请完成验证'));
} elseif ($post['captcha_id'] != $captcha_id) {
\Phpcmf\Service::C()->_json(0, dr_lang('后端极验id于前端极验id不同,请检查别名'));
}
});前端代码,于二次验证的代码相同
<script src="https://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>//引用jq
<script src="https://static.geetest.com/v4/gt4.js"></script>//引用极验验证码官方js
<script src="{THEME_PATH}assets/js/my.js"></script>//引用自定义js(这里修改了登录注册的js代码用于交互)
<div id="captcha"></div>
<script>
var result;//声明一个变量用于存储验证成功字段
var gtInstance;// 声明一个变量用于存储 gt 对象
var product ="bind"; // 声明一个变量用于存储 极验代码类型,popup(弹出式)float(浮动式)bind(隐藏按钮类型)
var captchaId="{dr_geetest('xzyz', 2)}"; // 声明一个变量用于存储 极验ID,xzyz 为后台别名
// 带* 号 为不可缺少的内容
initGeetest4({
captchaId: captchaId, //*对应的极验ID*根据别名获取
product: product, //* 极验代码类型,可自行更改
language: "zho", //*验证码语言 zho 指的是中文
//如果使用popup 或者float 有一个额外按钮,如需更改样式请查看官方文档 在此地方增加参数https://docs.geetest.com/gt4/apirefer/api/web
},
function (gt) {
gtInstance = gt;//将 gt 对象赋值给 gtInstance 变量
gt.appendTo("#captcha");//自动加载到id captcha
//onSuccess:验证成功后执行
gt.onSuccess(function () {
result = gt.getValidate();//验证成功获取的验证字段赋值给result
//这里因为不同于登录的判断规则(先验证密码,在验证验证码,最后验证邮箱和手机号格式),bind popup float 均不需要注释下面的代码
dr_ajax_member('{dr_member_url('register/index', ['groupid'=>$groupid])}', 'myform',result,gtInstance,product);
//登录的验证js做了二次修改,
//dr_ajax_member('url登录地址','表单id',result变量,gtInstance变量,product变量);
})
});
</script>
<div class="form-actions" style="margin-top:30px">
<label class="col-md-2 control-label"></label>
<div class="col-md-9" style="padding-left:5px;">
<label>
<button onclick="dr_ajax_member('{dr_member_url('register/index', ['groupid'=>$groupid])}', 'myform',result,gtInstance,product);" type="button" class="btn red" > 立即注册</button>
</label>
<label class="mt-checkbox mt-checkbox-outline" style="margin-left:20px;">
<input type="checkbox" name="is_protocol" value="1" checked> 我已阅读并同意
<span></span>
</label>
<label>
<a href="javascript:dr_show_protocol();">《用户注册协议》</a>
</label>
</div>
</div>