自从腾讯给每个人提供了20000次免费验证码后,成功吸引到了一波白嫖站长,由于这2W验证码有效期只有一年,为了不浪费赶紧利用起来才是王道。下面一起来学习下腾讯验证码是如何使用的。
腾讯云验证码地址:https://cloud.tencent.com/product/captcha
没开通的自己去上面的地址开通免费验证码,在控制台图形验证码里面点免费资源包,即可领取2W码。
开通好了后我们就要写代码了,第一步引入腾讯验证码js类。
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
如果你嫌弃腾讯的速度慢,可以将其下载到你的服务器中。
然后开始使用验证码功能。
一、标签属性绑定
在需要激活验证码的 DOM 元素(button、div、span)内加入以下 ID 及属性。
<!--点击此元素会自动激活验证码--> <!--id : 元素的 ID(必须)--> <!--data-appid : 验证码AppID(必须)--> <!--data-cbfn : 回调函数名(必须)--> <!--data-biz-state : 业务自定义透传参数(可选)--> <button id="TencentCaptcha" data-appid="appId" data-cbfn="callback" type="button" >验证</button>
创建js回调函数
window.callback = function(res){ console.log(res) // res(用户主动关闭验证码)= {ret: 2, ticket: null} // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"} if(res.ret === 0){ alert(res.ticket) // 票据 } }
注意:该JS验证码类会自动绑定id名为TencentCaptcha的HTML标签,如果不想使用它,请避免使用此id。
二、JS绑定HTML元素
手动绑定不要使用id="TencentCaptcha"
的元素,避免重复绑定单击。
//方法1: 直接生成一个验证码对象。 var captcha1 = new TencentCaptcha('appId', function(res) {/* callback */}); captcha1.show(); // 显示验证码 //方法2:绑定一个元素并自动识别场景id和回调。 // 验证码会读取dom上的`data-appid`和`data-cbfn`以及`data-biz-state`(可选)自动初始化 new TencentCaptcha(document.getElementById('TencentCaptchaBtn')); //方法3:绑定一个元素并手动传入场景Id和回调。 new TencentCaptcha( document.getElementById('TencentCaptchaBtn'), 'appId', function(res) {/* callback */}, { bizState: '自定义透传参数' } );
回调内容
前端验证成功后,验证码会调用业务传入的回调函数,并在第一个参数中传入回调结果。结果字段说明如下:
字段名 | 值类型 | 说明 |
---|---|---|
ret | Int | 验证结果,0:验证成功。2:用户主动关闭验证码。 |
ticket | String | 验证成功的票据,当且仅当 ret = 0 时 ticket 有值。 |
appid | String | 场景 ID。 |
bizState | Any | 自定义透传参数。 |
randstr | String | 本次验证的随机串,请求后台接口时需带上。 |
更多详细参数请查阅腾讯在线文档:https://cloud.tencent.com/document/product/1110/36841
使用DMD主题的用户,可以参考如下写法。
首先在function-theme.php文件中找到_the_head函数,这里是控制输出网页头部一些资源的,在其中加上腾讯的验证码js,就是上面那个。如果你不想每个页面都加载,只在特定页面加载可以使用wordpress的判断函数自行判断。
然后在pages目录下找到login.php文件,找到最后面的一段js,将之改为:
<script> var captcha1 = new TencentCaptcha('XXX你的appid', function(res) { if(res.ret==0){ $.ajax({ url: '/wp-content/themes/dmd/action/user.php', type: 'POST', dataType: 'json', data: $('.sign-form').serializeObject(), success: function(data, textStatus, xhr) { $(".sign-tips").text(data.msg); $(".sign-tips").css("display","block"); setTimeout(function () { $(".sign-tips").css("display","none"); }, 6000); if (data.error){ }else{ window.location.href=data.back; } } }); } }); function loginjs(frm,event){ var event=window.event?window.event:event; if(event.keyCode==13){ captcha1.show(); } } $(function(){ $('.btn-block').on('click', function(e){ captcha1.show(); }); }); </script>
此时再登录就会先触发验证码,当正确验证后才会向服务器发起登录请求。当然,这样只是对前端进行了验证,用户的验证数据是不是有效的、可靠的还需要传递给腾讯的验证码服务器验证,其中需要涉及到PHP的api这里由于篇幅问题就先不讲了,下一篇再讲。
具体效果如我演示站的登录页。DMD主题演示站登录页
评论 (5)