快捷搜索:   nginx

腾讯防水墙的对接方法 HTML+JS+PHP

腾讯防水墙项目类似谷歌的验证码检测项目,可以轻松实现验证机器人提交数据的行为。

在线体验:https://007.qq.com/online.html

快速开始:https://007.qq.com/quick-start.html


这里讲下腾讯防水墙的对接方法


案例如下


1、首先需要要你的前端页面加入腾讯防水墙的JS代码

<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>

一般放在HEAD里面,不放里面也是可以。随意


2、然后在你前端页面需要放置验证按钮的地方写入代码


官方案例:


<!--点击此元素会自动激活验证码-->
<!--id : 元素的id(必须)-->
<!--data-appid : AppID(必须填写你申请到的ID)-->
<!--data-cbfn : 回调函数名(必须)-->
<!--data-biz-state : 业务自定义透传参数(可选)-->
<button id="TencentCaptcha" data-appid="appId" data-cbfn="callback" type="button" >验证</button>

我是这样用的

<div id="down_link2">
<a id="TencentCaptcha"
        data-appid="2008305665"
        data-cbfn="callback"
       class="down_btn2"
><span>验证请求</span></a>
</div>


3、在前端页面验证请求按钮下面再创建个回调函数


官方案例:

<script>
window.callback = function(res){
    console.log(res)
    // res(未通过验证)= {ret: 1, ticket: null}
    // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
    if(res.ret === 0){
       //前端JS验证请求成功后要执行的方法,可以再AJAX转后端验证票据和随机字串是否合法,也可以直接当成验证通过执行其他显示步骤
       // alert(res.ticket)   // 票据
       // alert(res.randstr)   // 随机字串
    }
}
</script>


我是这样用的

<script>
window.callback = function(res){
    console.log(res)
    // res(未通过验证)= {ret: 1, ticket: null}
    // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
    if(res.ret === 0){
        //alert(res.ticket)   // 票据
load_down_addr1('{$file['file_id']}');
document.getElementById("down_link2").style.display="none";
    }
}
</script>


到这里就当验证通过,直接显示下载连接,并隐藏验证按钮


4、如果需要进一步验证这个验证请求是否合法,还可以继续往下,通过PHP后端提交验签参数给腾讯验证,前端用AJAX接收返回状态,成功执行,失败不执行下一步


<?php
//----------------------------------
// 腾讯验证码后台接入demo
//----------------------------------
header('Content-type:text/html;charset=utf-8');
$AppSecretKey = "你在腾讯防水墙申请到的安全密匙"; //$_GET["AppSecretKey"]
$appid = "你在腾讯防水墙申请到的APPID"; //$_GET["appid"]
$Ticket = $_GET["Ticket"]; //$_GET["Ticket"],前端传递过来的票据参数
$Randstr = $_GET["Randstr"]; //$_GET["Randstr"],前端传递过来的随机参数
$UserIP = $_GET["UserIP"]; //前端传递过来的访客的IP地址,或者也可以在这里通过后端识别访客IP
/**
 * 请求接口返回内容
 * @param  string $url [请求的URL地址]
 * @param  string $params [请求的参数]
 * @param  int $ipost [是否采用POST形式]
 * @return  string
*/
function txcurl($url,$params=false,$ispost=0){
    $httpInfo = array();
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
    curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
    curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    if( $ispost )
    {
        curl_setopt( $ch , CURLOPT_POST , true );
        curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
        curl_setopt( $ch , CURLOPT_URL , $url );
    }
    else
    {
        if($params){
            curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
        }else{
            curl_setopt( $ch , CURLOPT_URL , $url);
        }
    }
    $response = curl_exec( $ch );
    if ($response === FALSE) {
        //echo "cURL Error: " . curl_error($ch);
        return false;
    }
    $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
    $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
    curl_close( $ch );
    return $response;
}
$url = "https://ssl.captcha.qq.com/ticket/verify";
$params = array(
    "aid" => $appid,
    "AppSecretKey" => $AppSecretKey,
    "Ticket" => $Ticket,
    "Randstr" => $Randstr,
    "UserIP" => $UserIP
);
$paramstring = http_build_query($params);
$content = txcurl($url,$paramstring);
$result = json_decode($content,true);
if($result){
    if($result['response'] == 1){
        print_r($result);
    }else{
        echo $result['response'].":".$result['err_msg'];
    }
}else{
    echo "请求失败";
}
?>




到这里就对接完成,测试通过,成功运行


顶(1)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论