我正在尝试在具有2种形式的一页上使用2x reCapcha。我设法将它们分开显示,我现在无法验证数据。验证我使用像这样两个独立的功能
$recaptcha = $_POST['g-recaptcha-response'];
if(!empty($recaptcha)) {
$google_url = "https://www.google.com/recaptcha/api/siteverify";
$secret = 'secret';
$ip = $_SERVER['REMOTE_ADDR'];
$url = $google_url."secret=".$secret."&response=".$recaptcha."&remoteip=".$ip;
$res = getCurlData($url);
$res = json_decode($res, true);
...
if($res['success']) { do stuff }
加载我使用的2个验证码
<script src="//www.google.com/recaptcha/api.js?onload=myCallBack&render=explicit" async defer></script>
<script type="text/javascript">
var recaptcha1;
var recaptcha2;
var myCallBack = function() {
//Render the recaptcha1 on the element with ID "recaptcha1"
recaptcha1 = grecaptcha.render('recaptcha1', {
'sitekey' : 'key', //Replace this with your Site key
'theme' : 'light'
});
//Render the recaptcha2 on the element with ID "recaptcha2"
recaptcha2 = grecaptcha.render('recaptcha2', {
'sitekey' : 'key', //Replace this with your Site key
'theme' : 'light'
});
};
</script>
有人可以帮我怎么做?这甚至可能吗?
您在做一件棘手的事情。
首先,您需要清楚reCaptcha work的功能。现在,我将指导您转到post,了解如何将其插入并进行验证客户端。
1。在Google上注册-您将为两个reCaptchas使用相同的站点密钥和秘密密钥。
2。在您的网站上插入一个包含验证码的表格-您将需要一个包含验证码的表格,并具有2个不同的回调来验证其中的每一个。
<script src="https://www.google.com/recaptcha/api.js" >;
<form method="post">
<div class="g-recaptcha" data-sitekey="[site_key]" data-callback="onReturnCallback1" data-theme="light"></div>
<div class="g-recaptcha" data-sitekey="[site_key]" data-callback="onReturnCallback2" data-theme="dark"></div>
<input value="submit" type="submit" />
</form>
3。使用JavaScript代码解码响应-您需要定义2个回调以分别验证每个reCaptcha。完成后,将验证结果存储在JS变量中。
<script> src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
var success1=null, success2=null;
var onReturnCallback1 = function(response) {
//alert('g-recaptcha-response: ' + grecaptcha.getResponse());
var url='proxy.php?url=' + 'https://www.google.com/recaptcha/api/siteverify';
$.ajax({ 'url' : url,
dataType: 'json',
data: { response: response},
success: function( data ) {
var res = data.success.toString();
if (res == 'true') {
success1=true;
if (success1&&success2) {
// do form submission
}
}
} // end of success:
}); // end of $.ajax
}; // end of onReturnCallback
</script>
在每个回调中,您将成功结果保存在success1
和success2
中,并检查是否都成功完成了强制表单提交:
if (success1&&success2) {
// do form submission
}
4。服务器上的代理服务器返回true或false-似乎每个reCaptchas只需要一个代理文件即可验证站点。
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
header('HTTP/1.0 403 Forbidden');
die('You are not allowed to access this file.');
}
header('Content-type: application/json');
$url=$_GET['url'];
$response=$_GET['response'];
$secret = "[secter_key]";
$params = array('secret'=> $secret, 'response'=> $response);
$json=file_get_contents( $url . '?secret=' . $secret . '&response=' . $response);
echo $json;