12-08 957人
index.php
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>腾讯验证码接入示例</title>
<style>
body{margin:50px 0;text-align:center;font-family:PingFangSC-Regular,"Open Sans",Arial,"Hiragino Sans GB","Microsoft YaHei",STHeiti,"WenQuanYi Micro Hei",SimSun,sans-serif}
.btn{display:inline-block;box-sizing:border-box;border:1px solid #ccc;border-radius:2px;width:100px;height:40px;line-height:40px;font-size:16px;color:#666;cursor:pointer;background:#fff linear-gradient(180deg,#fff 0,#f3f3f3 100%)}
</style>
    <!-- 验证码程序依赖(必须)。请勿修改以下程序依赖,如使用本地缓存,或通过其他手段规避加载,会影响程序的正常使用。 -->
    <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
</head>
<body>
    <button id="TencentCaptcha" class="btn" type="button">验证</button>
</body>
<script src="//apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>
<script>
var tcaptchaCallback = function(res){
	// 返回结果
	// ret         Int       验证结果,0:验证成功。2:用户主动关闭验证码。
	// ticket      String    验证成功的票据,当且仅当 ret = 0 时 ticket 有值。
	// CaptchaAppId       String    验证码应用ID。
	// bizState    Any       自定义透传参数。
	// randstr     String    本次验证的随机串,请求后台接口时需带上。
	console.log('callback:', res);
	// res(用户主动关闭验证码)= {ret: 2, ticket: null}
	// res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
	// res(客户端出现异常错误 仍返回可用票据) = {ret: 0, ticket: "String", randstr: "String",  errorCode: Number, errorMessage: "String"}
	if (res.ret === 0) {
		$.ajax({
			type: "POST",
			dataType: "html",
			data: {ticket: res.ticket, randstr: res.randstr},
			url: "api.php",
			success: function (data) {
				alert(data);
			},
			error: function (data) {
				alert('服务器错误');
			}
		});
	}
}
$(document).ready(function(){
	var captcha1 = new TencentCaptcha('2046626881', tcaptchaCallback);
	$("#TencentCaptcha").click(function(){
		captcha1.show();
	})
})
</script>
</html>
api.php
<?php
@header('Content-Type: text/html; charset=UTF-8');
$ticket = $_POST['ticket'];
$randstr = $_POST['randstr'];
if(!$ticket || !$randstr) exit('参数不能为空');
$result = check_ticket($ticket, $randstr);
if($result === 1){
	exit('验证通过');
}elseif($result === -1){
	exit('接口已失效');
}elseif($result === 0){
	exit('验证不通过');
}
function check_ticket($ticket, $randstr)
{
	$url = 'https://cgi.urlsec.qq.com/index.php?m=check&a=gw_check&callback=url_query&url=https%3A%2F%2Fwww.qq.com%2F'.rand(111111,999999).'&ticket='.urlencode($ticket).'&randstr='.urlencode($randstr);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	$httpheader[] = "Accept: application/json";
	$httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";
	$httpheader[] = "Connection: close";
	curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);
	curl_setopt($ch, CURLOPT_REFERER, 'https://urlsec.qq.com/check.html');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $ret = curl_exec($ch);
    curl_close($ch);
	$arr = jsonp_decode($ret, true);
	if(isset($arr['reCode']) && $arr['reCode'] == 0){ //验证通过
		return 1;
	}elseif($arr['reCode'] == -109){ //验证码错误
		return 0;
	}else{ //接口已失效
		return -1;
	}
}
function jsonp_decode($jsonp, $assoc = false)
{
	$jsonp = trim($jsonp);
	if(isset($jsonp[0]) && $jsonp[0] !== '[' && $jsonp[0] !== '{') {
		$begin = strpos($jsonp, '(');
		if(false !== $begin)
		{
			$end = strrpos($jsonp, ')');
			if(false !== $end)
			{
				$jsonp = substr($jsonp, $begin + 1, $end - $begin - 1);
			}
		}
	}
	return json_decode($jsonp, $assoc);
}
          
欢迎留言