MENU

在AJAX|PJAX请求内使用reCAPTCHA验证码

最近做了一个免费SSL签发,在接入验证码的时候选择了reCAPTCHA,然而google的接入文档没有中文,后来经过查找和尝试,找到了方法.

前言

其实一开始就想接入reCAPTCHA的,但是因为文档看不懂而尝试接入极验验证和点触验证,然而接入过程和结果令人恶心,极验验证缺少开发文档,我尝试使用composer来安装其sdk,却发现composer仓库里没有这个包,无奈手动继承,终于照着demo配置好了验证的部分,再去配置html页面,发现爆出了js错误,网上搜索没有发现任何有用的信息,于是换了点触验证,点触也一个样子,js报错,后来还是打算把目标放在reCAPTCHA上,最后在locer提示下在github找到了sdk和文档还有demo,然后google搜索了how to use recaptcha in ajax关键词找到了在ajax中的使用方法,接入很简单,很顺利.

接入部分

先到https://www.google.com/recaptcha/admin填写你的域名选择验证码版本(我使用的是v2版本),你也可以填写本地开发域名,比如xxx.lan,在本地可以正常使用

然后集成reCPTCHA的sdk,这里我使用的thinkphp5,它支持使用composer来安装包,于是我使用composer require google/recaptcha "~1.1"来安装这个包,当然你也可以直接下载包手动集成,地址是:https://github.com/google/recaptcha

然后是php代码

$recaptcha = new \ReCaptcha\ReCaptcha('这里填写google给你的secret');
$resp = $recaptcha->verify('这里是客户表单提交的验证码', '客户的ip');
if (!$resp->isSuccess()) {
    return $this->error('未通过验证!');
}

然后是前端html代码

<div class="g-recaptcha" data-sitekey="google给你的sitekey"></div>
<!-- google验证码 -->
<script src='https://www.google.com/recaptcha/api.js'></script>
<script>
        $.ajax({
            url:"/ssl/index/create.html",
            type:'post',
            // async:false,
            data:{
                'fname':$('#srk-fname').val(),
                'lname':$('#srk-lname').val(),
                'email':$('#srk-email').val(),
                'phone':$('#srk-phone').val(),
                'csr':$('#srk-csr').val(),
                // 'captcha':$('#srk-captcha').val()
                'g-recaptcha-response':grecaptcha.getResponse() //获取reCAPTCHA验证码数据
            },
            success:function(data){}
        }
</script>
添加新评论

已有 17 条评论
  1. https://www.recaptcha.net/recaptcha/api.js
    把js换成这个就能正常使用验证码,谷歌在国内解析到了北京服务器,可惜官方api还是默认用google.com

    1. @Jaion使用reCAPTCHA的理由之一是把不需要的人挡在外面,真正需要的人知道怎么做

  2. 那个你还需要开放exec,我最早的版本也是参照那个做的,到beta0.3已经换了另一种方式了

    1. colin colin

      @shirakun另外一种方式怎么做呢 求教博主。
      我按照你的提示把exec php5改成php了,然后发现没有定义用户名和密码。又不会了@(哈哈)

    2. @colin你必须要有那个账户和密码才可以,防止被滥用,不能公开讨论

    3. colin colin

      @shirakun我知道咋回事了,原来是买服务器送无线证书。 请问现在这样的服务器还能买吗

    4. @colin可以,买哪个最低配的就好

  3. vethnet vethnet

    请问博主是什么时候重制ssl的证书个数的。看到的一直剩余零

    1. @vethnet因为ssl站点访问较大,而且读取sql也较为频繁,我这小独服的硬盘可能撑不住,搬到了namecheap的虚拟主机,但是忽略了虚拟主机的时区问题,今天8点左右才重置,现在已经调整了cron的执行时间,能不能行第二天才会有结果

    2. vethnet vethnet

      @shirakun你的时区是 UTC+8? 没有重置

    3. @vethnet并不是UTC+8,已经发现今天的还没重置,等效手动重置

    4. Sway Sway

      @shirakun能邮件联系? 我需要帮助@(酷)

    5. vethnet vethnet

      @Sway谢谢你,今天正常了@(呵呵)

    6. @Sway邮箱自己找,发邮件时说明来源和问题即可

    7. vethnet vethnet

      @shirakun给您发邮件,可能被至垃圾邮件了吧。@(呵呵) 升级为 0.4.6 之后凌晨后没有重置。还有我需要的证书可能较多,能合作?

    8. Sway Sway

      @shirakun2017-12-06 00:00 今天的证书没有刷新@(呵呵)

  4. colin colin

    这个免费证书怎么做到的。是利用漏洞吗?

996.icu 996.icu