Убедитесь, что флажок reCaptcha v2 отмечен - PullRequest
0 голосов
/ 05 февраля 2019

Я большую часть дня пытался заставить это работать, но все, похоже, не полностью работают с моим кодом.У меня есть отлично работающий скрипт sendmail, и я просто хочу добавить его в Google reCaptcha.До сих пор он не будет отправлять контактную форму, если флажок не установлен, но если он не установлен, мои средства проверки поля не работают, и нет предупреждения, чтобы сообщить пользователю проверить reCaptcha.Но если все поля заполнены, а флажок отмечен, это повторяет сообщение об успехе.

Я пробовал так много ссылок на Google и пытался следовать документам Google для разработчиков, но, похоже, не могу правильно декодировать мой ответи получить правильные операторы if, else!

//Checking For reCAPTCHA
$captcha;
if (isset($_POST['g-recaptcha-response'])) {
$captcha = $_POST['g-recaptcha-response'];
}
// Checking For correct reCAPTCHA
$response = 
file_get_contents("https://www.google.com/recaptcha/api/siteverify? 
secret=SECRETKEY&response=" . $captcha . "&remoteip=" . 
$_SERVER['REMOTE_ADDR']);
if (!$captcha || $response.success == false) {
echo "Your CAPTCHA response was wrong.";
exit ;
} else {

session_cache_limiter( 'nocache' );
header( 'Expires: ' . gmdate( 'r', 0 ) );
header( 'Content-type: application/json' );
$to         = 'hi@shanemuirhead.co.uk';  // put your email here
$email_template = 'simple.html';
$subject    = strip_tags($_POST['vsubject']);
$email       = strip_tags($_POST['vemail']);
$name       = strip_tags($_POST['vname']);
$message    = nl2br( htmlspecialchars($_POST['vmessage'], ENT_QUOTES) );
$result     = array();

if(empty($name)){
    $result = array( 'response' => 'error', 'empty'=>'name', 'message'=>'<strong>Error!</strong>&nbsp; Name is empty.' );
    echo json_encode($result );
    die;
} 
if(empty($email)){
    $result = array( 'response' => 'error', 'empty'=>'email', 'message'=>'<strong>Error!</strong>&nbsp; Email is empty.' );
    echo json_encode($result );
    die;
} 
if(empty($message)){
     $result = array( 'response' => 'error', 'empty'=>'message', 'message'=>'<strong>Error!</strong>&nbsp; Message body is empty.' );
     echo json_encode($result );
     die;
}



$headers  = "From: " . $name . ' <' . $email . '>' . "\r\n";
$headers .= "Reply-To: ". $email . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$templateTags =  array(
    '{{subject}}' => $subject,
    '{{email}}'=>$email,
    '{{message}}'=>$message,
    '{{name}}'=>$name
    );
$templateContents = file_get_contents( dirname(__FILE__) . '/inc/'.$email_template);
$contents =  strtr($templateContents, $templateTags);
if ( mail( $to, $subject, $contents, $headers ) ) {
    $result = array( 'response' => 'success', 'message'=>'<strong>Thank You!</strong>&nbsp; Your email has been delivered.' );
} else {
    $result = array( 'response' => 'error', 'message'=>'<strong>Error!</strong>&nbsp; Cann\'t Send Mail.'  );
}
echo json_encode( $result );
die;
}

Я просто хочу предупредить пользователя, что reCatpcha не отмечен и отправлять, если он есть, также было бы неплохо, чтобы все мои sendmail.php работали правильно.то есть, если имя, электронная почта или сообщение пусто, эхо сообщения пропущено?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019
<?php

session_cache_limiter( 'nocache' );
header( 'Expires: ' . gmdate( 'r', 0 ) );
header( 'Content-type: application/json' );
$to         = 'hi@shanemuirhead.co.uk';  // put your email here
$email_template = 'simple.html';
$subject    = strip_tags($_POST['vsubject']);
$email       = strip_tags($_POST['vemail']);
$name       = strip_tags($_POST['vname']);
$message    = nl2br( htmlspecialchars($_POST['vmessage'], ENT_QUOTES) );
$result     = array();


    if(empty($email)){
        $result = array( 'response' => 'error', 'empty'=>'email', 'message'=>'<strong>Error!</strong>&nbsp; Email is empty.' );
        echo json_encode($result );
        die;
    } 
    if(empty($name)){
        $result = array( 'response' => 'error', 'empty'=>'name', 'message'=>'<strong>Error!</strong>&nbsp; Name is empty.' );
        echo json_encode($result );
        die;
    } 
    if(empty($message)){
         $result = array( 'response' => 'error', 'empty'=>'message', 'message'=>'<strong>Error!</strong>&nbsp; Message body is empty.' );
         echo json_encode($result );
         die;
    }
    if(empty($_POST['g-recaptcha-response']))  {
        $result = array( 'response' => 'error', 'empty'=>'message', 'message'=>'<strong>Error!</strong>&nbsp; Please complete the Captcha.' );
         echo json_encode($result );
         die;
    }

    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])) {
        $secret = '6LeSSI0UAAAAAFnwmu5cj7bk4guiaoXXnlID5-C2';
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);
        if($responseData->success == true) {
    $headers  = "From: " . $name . ' <' . $email . '>' . "\r\n";
    $headers .= "Reply-To: ". $email . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    $templateTags =  array(
        '{{subject}}' => $subject,
        '{{email}}'=>$email,
        '{{message}}'=>$message,
        '{{name}}'=>$name
        );
    $templateContents = file_get_contents( dirname(__FILE__) . '/inc/'.$email_template);
    $contents =  strtr($templateContents, $templateTags);
    if ( mail( $to, $subject, $contents, $headers ) ) {
        $result = array( 'response' => 'success', 'message'=>'<strong>Thank You!</strong>&nbsp; Your email has been delivered.' );
    } else {
        $result = array( 'response' => 'error', 'message'=>'<strong>Error!</strong>&nbsp; Can\'t Send Mail.'  );
    }
    echo json_encode( $result );
    die;

        }
        else
        {
            echo "<p> Sorry verification valid</p>";
        }
   }
?>

Итак, немного поиграв и прочитав мой код, я смог заставить все работать, кроме неуверенного, как сбросить код с картинки!

Так что в итоге я получил всевалидаторы пустых полей для работы, после того, как их условия выполнены, он предупреждает пользователя о необходимости пометить код проверки, если это еще не сделано, и только тогда он отправит отправку формы и предупредит пользователя об успешном сообщении.Единственная проблема, которая сейчас возникает, - это сброс капчи.

0 голосов
/ 05 февраля 2019
$response = 
file_get_contents("https://www.google.com/recaptcha/api/siteverify? 
secret=SECRETKEY&response=" . $captcha . "&remoteip=" . 
$_SERVER['REMOTE_ADDR']);
$s = json_decode($response);
if (!$captcha || $s.success == false) {
echo "Your CAPTCHA response was wrong.";
exit ;

Попробуйте, возможно, прямой доступ к этому $ response не работает, вы пытались записать, что такое $ response от отладчика?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...