Google reCAPTCHA — продолжает получать `неверную капчу-соль`

#php #html #recaptcha

#php #HTML #recaptcha

Вопрос:

Я пытаюсь добавить reCAPTCHA на свой сайт, но продолжаю получать incorrect-captcha-sol ошибку при отправке ответа.

Кто-нибудь может сказать мне, правильно ли я выполняю следующее?

У меня есть универсальный index.php , который включает в себя contact.php . В contact.php Я вставил следующий код:

 require_once('recaptchalib.php');
$publickey = "XXXX";
$privatekey = "XXXX";

//the response from reCAPTCHA
$resp = null;
//the error code from reCAPTCHA, if any
$error = null;

if ($_POST['submit']) {
    $message = $_POST['message_txt'];
    $name = $_POST['name_txt'];
    $email = $_POST['email_txt'];
    
    $emailBody = $message;
    $to = 'xx';
    $from = $name.' <'.$email.'>';
    $subject = 'XX Website Enquiry';
    $headers = 'From: '.$from;  
        
    $resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
    
    if ($resp->is_valid) {
        echo 'captcha correct';
        if (mail($to,$subject,$emailBody,$headers)) {
            //echo 'mail sent';
            $confirmation = 'sent';
        }
        else {
            //echo 'mail not sent';
            $confirmation = 'error';
        }
    } else {
        # set the error code so that we can display it. You could also use
        # die ("reCAPTCHA failed"), but using the error message is
        # more user friendly
        
        $error = $resp->error;
        
        echo $error;
    }
}
  

В свой html я вставил КАПЧУ следующим образом:

 <form name="contactForm" method="post" action="index.php?id=contactamp;action=submit#contact">
    <tr><td>Name</td><td><div align="right">
        <input type="text" name="name_txt" class="input">
        </div></td></tr>
    <tr><td>Email</td><td><div align="right">
        <input type="text" name="email_txt" class="input">
    </div></td></tr>
    <tr><td height="10"></td></tr>
    <tr><td colspan="2">Message</td></tr>
    <tr><td colspan="2"><textarea name="message_txt" class="textarea" style="width:200px; height:100px"></textarea></td></tr>
    <tr><td colspan="2"><?php echo recaptcha_get_html($publickey, $error); ?></td></tr>
    <tr><td colspan="2" style="padding-top:10px;"><input type="image" src="images/header_06.gif" name="submit" value="submit"></td></tr>
</form>
  

Я не вижу, что я делаю что-то неправильно, но был бы признателен за любую помощь.

Ответ №1:

Вы делаете это со своего локального хостинга?

Я решаю эту проблему, добавляя localhost в разрешенный домен для проверки в настройках Google reCAPTCHA

Настройки reCAPTCHA домена

Комментарии:

1. Я забыл добавить локальный IP моего веб-сайта (тестирование на мобильном устройстве с тем же Wi-Fi, что и на моем компьютере в качестве localhost)

Ответ №2:

Я решил эту проблему, это одна из самых необычных вещей, с которыми я сталкивался, мой синтаксис ранее был:

 <table>
  <form>
    <tr><td></td></tr>
  </form>
</table>
  

Я изменил его на это:

 <form>
  <table>
    <tr><td></td></tr>
  </table>
</form>
  

Из-за этого переключения внезапно recaptcha_response_field и recaptcha_challenge_field возвращают значения обратно в форму.

Я не могу понять, почему это, потому что все мои переменные формы были отправлены обратно до переключения.

Спасибо всем за подсказки.

Комментарии:

1. У меня ошибка на стороне сервера с reCAPTCHA v3, см. Ответ Aditya Kresna Permana.

2. <form> недопустимый дочерний элемент <table>

Ответ №3:

если вы отправляете проверку дважды — например, один раз из javascript и один раз через php, вторая проверка завершится ошибкой, поскольку API позволяет решению возвращать действительность только один раз.

Надеюсь, это поможет, Джош

Ответ №4:

Это потому, что форма не может находиться снаружи tr…..it должно быть на выходе из таблицы ….. форма не может быть вставлена в таблицу, хотя она может быть вставлена в td.

Ответ №5:

В моем случае ошибка заключалась в установке формы без указания:

метод=»POST»

Приветствия!

Ответ №6:

Кажется, требуется HTTPS. Это исправило это для меня в процессе разработки.

Ответ №7:

Вы уверены, что вводите правильные слова?

это с веб-сайта recaptcha:

 Line 1       "true" or "false". True if the reCAPTCHA was successful
Line 2  if Line 1 is false, then this string will be an error code. reCAPTCHA can 
    display the error to the user (through the error parameter of api.recaptcha.net/challenge).
     Implementations should not depend on error code names, 
as they may change in the future.


    Example: If your response looks like this:

    false
    **incorrect-captcha-sol**

    ... you can add 'amp;error=incorrect-captcha-sol' to the challenge request URL, 
and the user will get an error code.
  

Ответ №8:

в корневом каталоге из скрипта установите php.ini с этим:

разрешить_url_fopen = Вкл.