- Home
- Blog
- Contact
In this tutorial, you will learn about how to create leads in Salesforce programmatically, without the use of plugins. This tutorial focuses on integrating Contact Form 7 to SF using the Web-to-Lead method.
The full code can be found at the end of the tutorial.
If you are interested in a different integration please let us know in the comments section.
First we need to hook into the CF7’s “before send email”.
add_action("wpcf7_before_send_mail", "web_to_salesforce");
Code language: JavaScript (javascript)
We then create a function where we do the logic. The CF7 hook passes one variable which I called “$cf7”.
function web_to_salesforce($cf7){
// do logic here
}
Code language: PHP (php)
Inside our function we retrieve the submission instance and the current contact form information.
function web_to_salesforce($cf7){
$submission = WPCF7_Submission::get_instance();
$wpcf = WPCF7_ContactForm::get_current();
}
Code language: PHP (php)
We can use the $wpcf object to to get the id and compare it to the id of the CF7 form we want to target. Bonus: we can also use the object to get the mail prop.
Using the $submission object we get the user-posted form data.
function web_to_salesforce($cf7){
$submission = WPCF7_Submission::get_instance();
$wpcf = WPCF7_ContactForm::get_current();
if( $wpcf->id == 99){ // 99 being the id of the CF7 form
if ( !$submission ) {
return false;
}
$mail = $wpcf->prop('mail');
$posted_data = $submission->get_posted_data();
}
}
Code language: PHP (php)
In the next step, we prepare the fields we want to send to Salesforce.
$url = 'https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
$fields = array(
'debug' => 0, // set to 1 to active debug mode
'debugEmail' => 'admin@website.com',
'oid' => '00A100000000abc',
'first_name' => $posted_data['first-name'],
'last_name' => $posted_data['last-name'],
'email' => $posted_data['email'],
'phone' => $posted_data['telephone'],
'company' => $posted_data['company'],
'state' => $posted_data['state'],
'description' => $posted_data['enquiry'],
'country' => $posted_data['your-country'],
'emailOptOut' => true,
'lead_source' => 'Contact form',
);
Code language: PHP (php)
We then call our cURL function that we will create next.
Code language: PHP (php)curl_send_to_salesforce($url, $fields);
Bonus: you can edit the email CF7 recipient here based on various rules on the posted data.
$mail['recipient'] = 'sales@website.com';
// Save the email to field
$wpcf->set_properties(array(
"mail" => $mail
));
// Return current cf7 instance
return $wpcf;
Code language: PHP (php)
Now for our cURL function:
function curl_send_to_salesforce($url, $fields){
// URL-ify the data for the POST
foreach($fields as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
// Open connection
$ch = curl_init();
// Set the url
// Set the number of POST vars
// Set the 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);
return $result;
}
Code language: PHP (php)
Now for the full code:
<?php
function web_to_salesforce($cf7){
$submission = WPCF7_Submission::get_instance();
$wpcf = WPCF7_ContactForm::get_current();
if( $wpcf->id == 99 ){ // 99 being the id of the CF7 form
if ( !$submission ) {
return false;
}
$mail = $wpcf->prop('mail');
$posted_data = $submission->get_posted_data();
$url = 'https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
$fields = array(
'debug' => 0, // set to 1 to active debug mode
'debugEmail' => 'admin@website.com',
'oid' => '00A100000000abc',
'first_name' => $posted_data['first-name'],
'last_name' => $posted_data['last-name'],
'email' => $posted_data['email'],
'phone' => $posted_data['telephone'],
'company' => $posted_data['company'],
'state' => $posted_data['state'],
'description' => $posted_data['enquiry'],
'country' => $posted_data['your-country'],
'emailOptOut' => true,
'lead_source' => 'Contact form',
);
curl_send_to_salesforce($url, $fields);
$mail['recipient'] = 'sales@website.com';
// Save the email to field
$wpcf->set_properties(array(
"mail" => $mail
));
// return current cf7 instance
return $wpcf;
}
}
function curl_send_to_salesforce($url, $fields){
// URL-ify the data for the POST
foreach($fields as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
// Open connection
$ch = curl_init();
// Set the url
// Set the number of POST vars
// Set the 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);
return $result;
}
Code language: HTML, XML (xml)
Hope this helped you get a head start with your integration. If you have any questions or need help with anything else, feel free to leave a comment below.