【发布时间】:2019-09-10 03:50:15
【问题描述】:
我通过 Dreamweaver 创建了一个网站,其中包含一个简单的联系表单来发送电子邮件。以前它没有recaptcha 并且工作正常,发送电子邮件并正确显示成功/失败消息。 我现在使用 Recaptcha v2 复选框重新编写了它,但现在总是收到错误消息“验证码无效”,并且没有电子邮件。 页面正确显示。 验证码正确显示并允许您进行选择,然后单击验证按钮,从而产生绿色勾号。但是,点击发送按钮时,总是失败。
感激地接受任何帮助。
直播网站:https://www.simpleenglish.info/en/contact_us/contact_form.php
我确认站点密钥和秘密密钥以及所有电子邮件地址都是正确的。我已经通过谷歌管理员两次删除并创建了密钥并关联了域,但均未成功。我相信代码是正确的(没有明显的错误)。我在这里没有发现任何类似的问题,也没有发现 Google Groups 可以为我指明方向。我不知道还能去哪里看。
contact_form.php 代码(现已完成):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/SE1.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Simple English Contact</title>
<script src="https://www.google.com/recaptcha/api.js"></script>
<!-- InstanceEndEditable -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-136785269-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-136785269-1');
</script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-1086244781484067",
enable_page_level_ads: true
});
</script>
<link href="https://www.simpleenglish.info/SE_3ColLiquid.css" rel="stylesheet" type="text/css" /><!--[if lte IE 7]>
<style>
.content { margin-right: -1px; } /* this 1px negative margin can be placed on any of the columns in this layout with the same corrective effect. */
ul.nav a { zoom: 1; } /* the zoom property gives IE the hasLayout trigger it needs to correct extra whiltespace between the links */
</style>
<![endif]-->
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->
</head>
<body>
<div class="container">
<div class="sidebar1"> <a href="https://www.simpleenglish.info/index.html"><img src="/images/logo.jpg" alt="Simple English Logo" width="99%"/></a>
<ul class="nav" >
<li><a href="https://www.simpleenglish.info/index.html">Home</a></li>
<li><a href="https://www.simpleenglish.info/en/vocabulary.html">Vocabulary</a></li>
<li><a href="https://www.simpleenglish.info/en/usefullinks.html">Useful Links</a></li>
<li><a href="https://www.simpleenglish.info/en/teachersaids.html">Teacher's Aids</a></li>
<li><a href="https://www.simpleenglish.info/en/contact_us/contact_form.php">Contact us</a></li>
<li><a href="https://www.simpleenglish.info/en/sitemap.html">Site Map</a></li>
</ul>
</div>
<div class="content">
<img src="https://www.simpleenglish.info/images/title.jpg" width="99%" alt="Simple English Title"/>
<br />
<br />
<!-- InstanceBeginEditable name="EditRegionContent" -->
<h1 class="pageheader">Contact Us</h1>
<p>To send us a message, please enter <strong>all the information</strong> in the following form, then click the 'Send' button.</p>
<div class="contact_us">
<form method="post" action="" accept-charset="UTF-8">
<table>
<tr><td>Name:</td><td><input type="text" name="sendername" placeholder="Enter your full name" size="50" required="required"/></td></tr>
<tr><td>Email:</td><td><input type="email" name="senderemail" placeholder="Enter your email address" size="50" required="required"/></td></tr>
<tr><td>Message Context:</td><td><input type="text" name="sendercontext" placeholder="this will be context" size="50" required="required"/></td></tr>
<tr><td>Message:</td><td><textarea name="sendermessage" rows="5" cols="50" placeholder="How can we help you?" required="required"></textarea></td></tr>
<tr><td>Spam Check:</td><td><div class="g-recaptcha" data-sitekey="XXX Correct Key XXX"></div></td></tr>
<tr><td></td><td><input type="submit" name="submit" value="Send" class="submit-btn"/></td></tr>
</table>
</form>
<div class="status">
<?php if(isset($_POST['submit']))
{
$user_name = $_POST['sendername'];
$user_email = $_POST['senderemail'];
$user_context = $_POST['sendercontext'];
$user_message = $_POST['sendermessage'];
$email_from = 'contact@simpleenglish.info';
$email_subject = "Simple English Contact";
$email_body = "Name: $user_name.\n".
"Email: $user_email.\n".
"Context: $user_context.\n".
"Message: $user_message.\n";
$to_email = "admin@simpleenglish.com";
$header = "From: $email_from \r\n";
$header .= "Reply-To: $user_email \r\n";
$secretkey = "XXX Correct Key XXX";
$responsekey = $_POST['g-recaptcha-response'];
$userip = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret=$secretkey&response=$responsekey&remoteip=$userip";
$response = file_get_contents($url);
$response = json_decode($response);
if($response->success)
{
mail($to_email,$email_subject,$email_body,$header);
echo "Message sent successfully";
}
else
{
echo "Invalid Captcha. Please try again.";
}
}
?>
</div>
</div>
<p> </p>
<p> </p>
<!-- InstanceEndEditable -->
<p> </p>
<!-- end .content --></div>
<div class="sidebar2">
<h4> </h4>
<p> </p>
<!-- end .sidebar2 --></div>
<div class="footer">
<p>Copyright © 2018<br />
All rights reserved <!-- end .footer --></p>
</div>
<!-- end .container --></div>
</body>
<!-- InstanceEnd --></html>
【问题讨论】:
-
在
$response上做一个var_dump 看看谷歌返回了什么?有一段时间没有使用 v2 但文档说方法应该是 POST 你试过了吗? -
Second2None,感谢您发现“POST”。我已经做出改变,但没有运气。我将运行 var_dump,但 TBH 不知道我在寻找什么。
-
您想发布您尝试过的 POST 代码吗?
$response又返回了什么? -
我不确定如何在此处发布代码,这些 cmets 有字符限制。如果你能告诉我怎么做,我会做的。 var_dump 的结果是 "NULL" 。虽然通过玩耍,在一次测试中我也得到了“bool(false)”。如前所述,我不知道这些是什么意思,但希望对您有所帮助?
-
您可以编辑您的问题并将其添加到底部。
file_get_contents在失败时返回false,在将其转换为 json 之前执行var_dump($response),json_decode在无效 json 时返回NULL。我检查了您的表格,g-recaptcha-response发送正确。我将在下面发布我通常如何使用 file_get_contents 进行检查的答案
标签: recaptcha