CF7 to Salesforce integration programatically

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");

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
}

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();
}

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();
	}
}

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',

);

We then call our cURL function that we will create next.

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;

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;
}

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;
}

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.

Leave a Reply

Your email address will not be published. Required fields are marked *