最新的bfwsoa版本支持两种人机验证方式:图片运算验证和单击验证
图片验证就是传统的,mode设置为valideimg,action可以是字符串(单个),也可以是数组(多个action),这种方式支持web和api访问。
public $_config = [ 'humancheck' => ['mode' => "valideimg", "expiresec" => 100, "action" => "ListData"], ];
expiresec表示每次验证通过后多少秒内无需人机认证直接放行。
如果是api访问,比如小程序和app,那么直接请求接口会返回一个json的验证数据,以下三种,第一种是验证图片的base64格式,第二种是验证码成功返回的,第三种是验证失败返回的
{humancheck":"validatestart","data":"data:image\/jpeg;base64,iVBO
'humancheck' : "validatecomplete", 'data' : "ok"'humancheck' : "validatefail",'data' : "错误"
我们写一个调用api实现人机验证的例子
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" /> <title>BFW NEW PAGE</title> <script id="bfwone" data="dep=jquery.17&err=0" type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/bfwone.js"></script> <script type="text/javascript"> bready(function() { $("#sumbbtn").click(function(){ let codes= $("#validecode").val(); if(codes!=""){ $.post("/Api/",{"validatecode":codes},function(response){ if(response.humancheck=="validatefail"){ alert(response.data) }else if(response.humancheck=="validatecomplete"){ alert(response.data) //正常请求 }else{ if(response.code!=200){ alert(response.data) }else{ //正常请求 } } },"json") } }); $.get("/Api/",function(response){ if(response.humancheck=="validatestart"){ $("#validepanel").show(); $("#valideimg").attr("src",response.data); }else{ if(response.code!=200){ alert(response.data) }else{ //正常请求 } } },"json") }); </script> <style> </style> </head> <body> <h1>页面ajax请求数据</h1> <div id="validepanel" style="display:none;"> <img src="" id="valideimg" /> <input id="validecode" type="text" placeholder="请输入图片中数字运算结果" /> <input type="button" id="sumbbtn" value="提交" /> </div> </body> </html>参考这个例子就能写出app或小程序的代码。还有一种是mode为click,这种只支持网页h5人机验证
public $_config = [ 'humancheck' => ['mode' => "click", "expiresec" => 100, "btntext" => "点击预览", "btnbgcolor" => "#2596cc", "waitsec" => 10000, "action" => "ListData"], ];"btntext" 表示按钮文字 "btnbgcolor" 文字颜色 "waitsec" 按钮出现等待时间,1000表示1秒
网友回复