Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always getting the Invalid Input Response error message. #521

Open
jackjpdiscos opened this issue Mar 15, 2023 · 0 comments
Open

Always getting the Invalid Input Response error message. #521

jackjpdiscos opened this issue Mar 15, 2023 · 0 comments

Comments

@jackjpdiscos
Copy link

Trying to update my plugin code so it handles Google ReCAPTCHA V3 however I am getting the error message Invalid Input Response when I use V3 Keys, even after updating the code.

I tried

$site_key = '(actual site key)'

and also

$site_key = mdjm_get_option ('dcf_recaptcha_site_key')

The 'dcf_recaptcha_site_key' is a user input based on their own site key.

Same applies for the secret key too (dcf_recaptcha_secret). Full code is this:

/**
 * Display a form recaptcha field
 *
 * @since   2.0
 * @return  str         reCaptcha Field
 */
function mdjm_dcf_display_recaptcha_field() {
    global $dcf_form;

    $site_key = '6LeiLvgkAAAAAF-oKFQAq-p4AVQLNkYmK9UAmncz';

    if ( ! $dcf_form->settings['recaptcha'] || ! $site_key ) {
        return;
    }

    wp_enqueue_script( 'google-recaptcha', 'https://www.google.com/recaptcha/api.js?render='.$site_key );
    wp_enqueue_script( 'google-recaptcha' );

    echo sprintf('<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response" value="" />');

} // mdjm_dcf_display_recaptcha_field
add_action( 'mdjm_dcf_form_after_fields', 'mdjm_dcf_display_recaptcha_field', 10, 2 );

/**
 * Validate reCaptcha.
 *
 * @since   2.0
 * @param   str $response   reCaptcha response.
 * @return  bool    True if verified, otherwise false
 */
function mdjm_dcf_validate_recaptcha( $response ) {
    $secret_key = '6LeiLvgkAAAAAOoxEjyX3ikK48znwGkwAXYKnBVE';
    $remoteip = $_SERVER['REMOTE_ADDR'];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret'   => $secret_key,
        'response' => $response,
        'remoteip' => $remoteip,
    );
    $options = array(
        'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query( $data ),
        ),
    );

    $context  = stream_context_create( $options );
    $result = file_get_contents( $url, false, $context );
    $result = json_decode( $result );

    if ( ! $result->success || $result->score < 0.5 ) {
        MDJM()->debug->log_it( 'Google reCaptcha Error: ' . var_export( $result->{'error-codes'}, true ) );
        return false;
    }

    return true;
} // mdjm_dcf_validate_recaptcha

/**
 * Process contact form submissions.
 *
 * @since   2.0
 * @return  void
 */
function mdjm_dcf_process_contact_form_submission() {
    if ( ! isset( $_POST['mdjm_dcf_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['mdjm_dcf_nonce'] ) ), 'mdjm-dcf-form-submit' ) ) {
        wp_die( esc_html_e( 'Security failed.', 'mdjm-dynamic-contact-forms' ) );
    }

    // Verify ReCAPTCHA V3
    $secret_key = mdjm_get_option( 'dcf_recaptcha_secret' );
    $response = $_POST['g-recaptcha-response'];
    $remoteip = $_SERVER['REMOTE_ADDR'];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret'   => $secret_key,

        'response' => $response,
        'remoteip' => $remoteip,
        'action'   => 'submit_form'
    );
    $options = array(
        'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query( $data ),
        ),
    );

    $context  = stream_context_create( $options );
    $result = file_get_contents( $url, false, $context );
    $result = json_decode( $result );

    if ( ! $result->success || $result->score < 0.5 ) {
        wp_die( esc_html_e( 'Invalid reCAPTCHA.', 'mdjm-dynamic-contact-forms' ) );
    }

    mdjm_do_honeypot_check( $_POST );

    $form_id  = ! empty( $_POST['dcf_form_id'] ) ? $_POST['dcf_form_id'] : '';
    $redirect = ! empty( $_POST['redirect'] ) ? $_POST['redirect']  : false;

    $posted = array();
    $ignore = mdjm_dcf_ignore_fields();

    foreach ( $_POST as $key => $value ) {
        if ( ! in_array( $key, $ignore ) ) {
            $posted[ $key ] = $value;
        }
    }

    if ( mdjm_dcf_add_event_from_form( $form_id, $posted ) ) {
        $dcf_form = new MDJM_Contact_Form( $form_id );

        if ( ! $dcf_form->settings['redirect'] ) {
            $url = add_query_arg( 'mdjm_message', 'form_submitted', $redirect );
        } else {
            $url = get_permalink( $dcf_form->settings['redirect'] );
        }
    } else {
        $url = add_query_arg( 'mdjm_message', 'submit_fail', $redirect );
    }

    wp_safe_redirect( $url );
    die();
} // mdjm_dcf_process_contact_form_submission
add_action( 'mdjm_submit_contact_form', 'mdjm_dcf_process_contact_form_submission' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant