Validation Problems
-
The plugin loads perfectly but when I fill the form and try to submit it I always receive validation problems and all other field are working correctly.
Do you know what is the problem?
-
I wasn’t having this issue on my local development machine but this issue appeared on our production server. After looking at the PHP error logs it turned out to be related to the plugin’s current use of the
file_get_contents()function to retrieve a remote URL. I’ve configured PHP so that theallow_url_fopenoption is set to'off'on our production server (for security reasons) so the CAPTCHA never validates on my server (since it can’t make the request tohttps://www.google.com/recaptcha/api/siteverifyWordPress provides an HTTP API (http://codex.ww.wp.xz.cn/HTTP_API) which would be more appropriate here, so hopefully the developers are moving in that direction. I modified my copy of the plugin to use the WordPress HTTP API instead and it works predictably for me (WordPress 4.2.2 on PHP 5.5/5.6). Apparently the plugin authors are reworking this part of the plugin and those changes will make it into a future version of the plugin, but for the time being you can simply modify it yourself.
I changed lines 113-124 in
/public/includes/contact-form-7/class-wdm-contact-form-7-public.phpfrom this:$no_ssl_array = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false ) ); //complusory for 5.6 $ctx = stream_context_create( $no_ssl_array ); $json_reply = file_get_contents( "https://www.google.com/recaptcha/api/siteverify?secret=" . $secret_key . "&response=" . $recaptcha_value, false, $ctx ); $reply_obj = json_decode( $json_reply );To this:
$response = wp_remote_get( "https://www.google.com/recaptcha/api/siteverify?secret=" . $secret_key . "&response=" . $recaptcha_value ); $reply_obj = json_decode( wp_remote_retrieve_body( $response ) );Anyway, I hope this helps if your issue turns out to be the same one I was experiencing.
The above is sort of a direct translation of the existing code but I further refactored this to use a POST request instead (Google says you should be using a POST request in the reCAPTCHA documentation anyway). My post above is too old to edit now, so here’s a revision:
$response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array( 'method' => 'POST', 'body' => array( 'secret' => $secret_key, 'response' => $recaptcha_value ) ) ); $reply_obj = json_decode( wp_remote_retrieve_body( $response ) );Hi Sam,
We have made the changes in the current update (v2.0).Thanks for your contribution.I am also getting a CF7 validation error when submitting the form. It is only the reCAPTCHA that is causing the validation error.
I have the latest version installed (4.0.3) and so it already includes this code update from above – I verified this.
My WordPress version is 4.2.2 and Contact Form 7 version is 4.2.2. I am using a shared hosting environment for the website at 1&1 Hosting. The contact form is located here: http://artie.iohouse.com/index.php/contact/
Any other ideas what may be causing this validation error to occur with reCAPTCHA?
Hi iohouse,
Your PHP version is 5.3.5 which may be the reason for the issue. Since the PHP version is old we are not able to recreate the error scenario. Try updating PHP version and see if it solves your issue, or else if you don’t want to update your PHP version contact [email protected] for further assistance.
Thank you.
The topic ‘Validation Problems’ is closed to new replies.