+
95
-

回答

最新的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秒

网友回复

我知道答案,我要回答