我在网站上有一个salesforce web-to-lead表单。一切正常,但没有recaptcha或任何方式来防止垃圾邮件。所以我下载了recaptcha,得到了所有设置,我还按照here的说明获取$ _POST数据,验证recaptcha是否正确,然后将其提交给salesforce。
我得到了所有这些设置但是当我提交表单时,它只是转到我的check-this-first.php(我称之为contactFormConfirm.php)页面并且只是空白。它没有触及retURL或实际提交给salesforce。
任何可以帮助我摆脱的光都会很棒。提前谢谢。
以下是我正在使用的代码:
Salesforce Web to Lead:
<form action="/contactFormConfirm.php" method="POST">
<input type=hidden name="oid" value="#############">
<input type=hidden name="retURL" value="http://www.google.com">
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="first_name" class="span3">First Name</label>
<input id="first_name" maxlength="40" name="first_name" size="20" type="text" class="span9" />
</div>
<div class="span6 pull-left">
<label for="last_name" class="span3">Last Name</label>
<input id="last_name" maxlength="80" name="last_name" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="title" class="span3">Title</label>
<input id="title" maxlength="40" name="title" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="email" class="span3">Email</label>
<input id="email" maxlength="80" name="email" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="phone" class="span3">Phone</label>
<input id="phone" maxlength="40" name="phone" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="00N4000000231ne" class="span3" style="position:relative; top:-1.2em;">Profile:</label>
<select id="profile" name="00N4000000231ne" title="Profile" class="span9"> <option value="">--None--</option>
**[other options hidden for privacy]**
</select>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="company" class="span3">Company</label>
<input id="company" maxlength="40" name="company" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="country" class="span3">Country</label>
<input id="country" maxlength="40" name="country" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="street" class="span3">Address</label>
<textarea name="street" class="span9"></textarea><br>
</div>
<div class="span6 pull-left">
<label for="city" class="span3">City</label>
<input id="city" maxlength="40" name="city" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="state" class="span3" style="position:relative; top:-1.2em;">State / Province</label>
<input id="state" maxlength="20" name="state" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="zip" class="span3">Zip</label>
<input id="zip" maxlength="20" name="zip" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="00N40000001V9wA" class="span3" style="position:relative; top:-1.2em;">Product Interest:</label>
<select id="productInterest" multiple="multiple" name="00N40000001V9wA" title="Product Interest" class="span9" size="5">
<option value="API">API</option>
**[other options hidden for privacy]**
</select><br>
</div>
<div class="span6 pull-left">
<label for="00N40000001V8Yl" class="span3" style="position:relative; top:-1.2em;">Background Notes:</label>
<textarea id="notes" name="00N40000001V8Yl" type="text" wrap="soft" class="span9"></textarea><br>
</div>
</div>
<div class="clearfix"><br /></div>
<div class="span12 offset3">
<div class="span10 pull-right">
<label for="lead_source" class="span8 pull-left">Check here to be contacted by *** for a demonstration.</label>
<input id="demonstration" type="checkbox" name="lead_source" class="span1 pull-left" value="Web w/Demo Request"></input>
</div>
<div class="span10 pull-right">
<label for="00N400000023QE0" class="span8 pull-left">Check here if you have a timeline for this project.</label>
<input id="timeline" type="checkbox" name="00N400000023QE0" class="span1 pull-left" value="Confirmed"></input>
</div>
<div class="span10 pull-right">
<label for="00N400000023QE5" class="span8 pull-left">Check here if you have purchase authority for this project.</label>
<input id="purchaseAuthority" type="checkbox" name="00N400000023QE5" class="span1 pull-left" value="Confirmed"></input>
</div>
</div>
<div class="clearfix"><br /></div>
<div class="row-fluid">
<div class="span9 pull-right offset2">
<div class="span8">
<?php
require_once('recaptcha/recaptchalib.php');
$publickey = "xxxxxxxxxxxxx"; // you got this from the signup page
echo recaptcha_get_html($publickey);
?><br />
</div>
</div>
</div>
<input type="hidden" name="lead_source" value="Web" />
<input type="hidden" name="00N4000000231kf" value="Web Inquiry" />
<div class="span10 offset1 pull-right">
<input type="submit" name="ctl00$ctl00$MainContent$mainContentHolder$btnSubmit" value="Submit Inquiry" class="btn btn-primary span3 pull-right" />
</div>
</form>
这是带有php cURL代码的contactFormConfirm.php代码:
<?php
ob_start();
session_start();
include_once('[path-to]/recaptcha/recaptchalib.php');
//Recaptcha Settings
$publickey = "xxxxxxxxx"; // you got this from the signup page
$privatekey = "xxxxxxxxx";
//curl method posting
//extract data from the post
extract($_POST);
if (isset($submit)){
$ok = 1;
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
$ok = 0;
}
if ($ok){
//set POST variables
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
$fields = array(
'oid'=>urlencode($oid),
'retURL'=>urlencode($retURL),
'first_name'=>urlencode($first_name),
'last_name'=>urlencode($last_name),
'title'=>urlencode($title),
'email'=>urlencode($email),
'phone'=>urlencode($phone),
'00N4000000231ne'=>urlencode($profile),
'company'=>urlencode($company),
'country'=>urlencode($country),
'address'=>urlencode($address),
'city'=>urlencode($city),
'state'=>urlencode($state),
'zip'=>urlencode($zip),
'00N40000001V9wA'=>urlencode($productInterest),
'00N40000001V8Yl'=>urlencode($notes),
'lead_source'=>urlencode($demonstration),
'00N400000023QE0'=>urlencode($timeline),
'00N400000023QE5'=>urlencode($purchaseAuthority)
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');
//print_r($fields_string);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
} //if ok
else {
echo "<h4>Sorry - Invalid Captcha </h4>";
}
} //if submit.
?>
答案 0 :(得分:1)
工作了几个小时之后,我和另一位工作的开发人员能够使用上面的解决方案(种类)来解决这个问题。
以下是它的崩溃方式:
<script type="text/javascript">
var RecaptchaOptions = {
theme : 'clean'
};
</script>
<form action="/contactFormConfirm.php" method="POST" >
<input type=hidden name="oid" value="#########">
<input type=hidden name="retURL" value="http://www.website.com/thank-you/">
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="first_name" class="span3">First Name</label>
<input id="first_name" maxlength="40" name="first_name" size="20" type="text" class="span9" />
</div>
<div class="span6 pull-left">
<label for="last_name" class="span3">Last Name</label>
<input id="last_name" maxlength="80" name="last_name" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="title" class="span3">Title</label>
<input id="title" maxlength="40" name="title" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="email" class="span3">Email</label>
<input id="email" maxlength="80" name="email" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="phone" class="span3">Phone</label>
<input id="phone" maxlength="40" name="phone" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="profile" class="span3" style="position:relative; top:-1.2em;">Profile:</label>
<select id="profile" name="profile" title="OverDrive Profile" class="span9">
<option value="">--None--</option>
</select>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="company" class="span3">Company</label>
<input id="company" maxlength="40" name="company" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="country" class="span3">Country</label>
<input id="country" maxlength="40" name="country" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="street" class="span3">Address</label>
<textarea name="street" class="span9"></textarea><br>
</div>
<div class="span6 pull-left">
<label for="city" class="span3">City</label>
<input id="city" maxlength="40" name="city" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="state" class="span3" style="position:relative; top:-1.2em;">State / Province</label>
<input id="state" maxlength="20" name="state" size="20" type="text" class="span9" /><br>
</div>
<div class="span6 pull-left">
<label for="zip" class="span3">Zip</label>
<input id="zip" maxlength="20" name="zip" size="20" type="text" class="span9" /><br>
</div>
</div>
<div class="clearfix"></div>
<div class="row span12 pull-left">
<div class="span6 pull-left">
<label for="productInterest" class="span3" style="position:relative; top:-1.2em;">Product Interest:</label>
<select id="productInterest" multiple="multiple" name="productInterest" title="Product Interest" class="span9" size="5">
<option value="API">API</option>
</select><br>
</div>
<div class="span6 pull-left">
<label for="notes" class="span3" style="position:relative; top:-1.2em;">Background Notes:</label>
<textarea id="notes" name="notes" type="text" wrap="soft" class="span9"></textarea><br>
</div>
</div>
<div class="clearfix"><br /></div>
<div class="span12 offset3">
<div class="span10 pull-right">
<label for="lead_source" class="span8 pull-left">Check here to be contacted for a demonstration.</label>
<input id="lead_source" type="checkbox" name="lead_source" class="span1 pull-left" value="Web w/Demo Request"></input>
</div>
<div class="span10 pull-right">
<label for="timeline" class="span8 pull-left">Check here if you have a timeline for this project.</label>
<input id="timeline" type="checkbox" name="timeline" class="span1 pull-left" value="Confirmed"></input>
</div>
<div class="span10 pull-right">
<label for="purchaseAuthority" class="span8 pull-left">Check here if you have purchase authority for this project.</label>
<input id="purchaseAuthority" type="checkbox" name="purchaseAuthority" class="span1 pull-left" value="Confirmed"></input>
</div>
</div>
<div class="clearfix"><br /></div>
<div class="row-fluid">
<div class="span9 pull-right offset2">
<div class="span8">
<?php
require_once('recaptcha/recaptchalib.php');
$publickey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // you got this from the signup page
echo recaptcha_get_html($publickey);
?><br />
</div>
</div>
</div>
<div class="span10 offset1 pull-right">
<input type="submit" name="submit" value="Submit Inquiry" class="btn btn-primary span3 pull-right" />
</div>
</form>
这是contactFormConfirm文件:
<?php
ob_start();
session_start();
include_once('path-to/recaptcha/recaptchalib.php');
//Recaptcha Settings
$publickey = "xxxxxxxxxxxxxxxxxxxxxxxxx"; // you got this from the signup page
$privatekey = "xxxxxxxxxxxxxxxxxxxxxxxx";
//curl method posting
//extract data from the post
extract($_POST);
if ($submit == 'Submit Inquiry'){
$ok = 1;
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
$ok = 0;
}
if ($ok){
//set POST variables
$url = 'salesforce URL';
$fields = array(
'oid'=>urlencode($oid),
'retURL'=>urlencode($retURL),
'first_name'=>urlencode($first_name),
'last_name'=>urlencode($last_name),
'title'=>urlencode($title),
'email'=>urlencode($email),
'phone'=>urlencode($phone),
'XXXXXXXXXXXXXXXX'=>urlencode($profile),
'company'=>urlencode($company),
'country'=>urlencode($country),
'address'=>urlencode($street),
'city'=>urlencode($city),
'state'=>urlencode($state),
'zip'=>urlencode($zip),
'XXXXXXXXXXXXXXXX'=>urlencode($productInterest),
'XXXXXXXXXXXXXXXX'=>urlencode($notes)
);
// replace XXXXXX with custom field ID
// send default "lead source" value if it is not passed in the HTML form
if (isset($lead_source))
{
$fields['XXXXXXXXXXXXXXXXX'] = urlencode('Web w/Demo Request');
}
else
{
$fields['XXXXXXXXXXXXXXXXX'] = urlencode('Web');
}
// add values to array if they are passed in via the HTML form
if (isset($timeline))
{
$fields['XXXXXXXXXXXXXXXXX'] = urlencode($timeline);
}
if (isset($purchaseAuthority))
{
$fields['XXXXXXXXXXXXXXXX'] = urlencode($purchaseAuthority);
}
// add constant fields
$fields['XXXXXXXXXXXXXXX'] = urlencode('Web Inquiry');
$fields['recordType'] = urlencode('XXXXXXXXXXXXXXX');
//url-ify the data for the POST
$fields_string = '';
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string = substr($fields_string, 0, -1); // delete last &
rtrim($fields_string,'&');
//print_r($fields_string);
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
} //if ok
else {
echo "<h4>Sorry - Invalid Captcha </h4>";
}
} //if submit.
?>
答案 1 :(得分:0)
我知道这是一个旧线程,但我在尝试做同样的事情时遇到了它并提出了这个解决方案:
<?php
ob_start();
session_start();
require_once('recaptchalib.php');
$key_public = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$key_private = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$captchaFailed = false;
$response = null;
$reCaptcha = new ReCaptcha($key_private);
if (!function_exists('curl_version')) {
die('Curl package missing.');
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['g-recaptcha-response'])) {
$response = $reCaptcha->verifyResponse(
$_SERVER['REMOTE_ADDR'],
$_POST['g-recaptcha-response']
);
if ($response !== null) {
if ($response->success) {
$fields = $_POST;
$sendURL = $fields['sendURL'];
unset($fields['sendURL']);
unset($fields['g-recaptcha-response']);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $sendURL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
curl_close($ch);
} else {
$captchaFailed = true;
}
} else {
$captchaFailed = true;
}
} else {
$captchaFailed = true;
}
}
if ($captchaFailed && count(get_included_files()) < 3) {
echo 'reCAPTCHA failed! Please go back and try again.';
}
?>
您需要创建一个名为sendURL
的隐藏输入字段,其中包含您要将表单发送到的网址的值。
您可以将表单的操作设置为包含上述代码的文件,也可以将其包含在包含表单的页面顶部,并将操作留空。
将所有内容都包含在同一页面中的示例可能是这样的:
<?php require_once('form-submit.php'); ?>
<html>
<body>
<form method="post">
<input type="hidden" name="sendURL" value="https://login.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8&...">
<label for="name">Name:</label>
<input type="text" name="name" value="<?php if (!empty($_POST['name'])) { echo $_POST['name']; } ?>">
<label for="email">E-Mail:</label>
<input type="text" name="email" value="<?php if (!empty($_POST['email'])) { echo $_POST['email']; } ?>">
<label for="message">Message:</label>
<textarea name="message"><?php if (!empty($_POST['message'])) { echo $_POST['message']; } ?></textarea>
<?php if ($captchaFailed): ?>
<p>reCAPTCHA failed! Please try again!</p>
<?php endif; ?>
<div class="g-recaptcha" data-sitekey="<?php echo $key_public; ?>"></div>
</form>
<script src="https://www.google.com/recaptcha/api.js"></script>
</body>
</html>
你可以在任何需要验证reCAPTCHA的情况下使用它,然后再将表单数据发送到其他地方。