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.

curl_send_to_salesforce($url, $fields);
Code language: PHP (php)

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.

Published by Dragos Micu

WooCommerce

9 Comments

  1. Hello Dragos,
    first thank you for the slick script, the one I had before was quite longer and had more code… 🙂

    Your script used to work beautifully on my site, but since a few days all dropdown fields in CF7 are send as “=array” to salesforce.

    Do you have an idea what could have caused this? The last CF7 Update perhaps?

    Kind Regards

    Seb

    Reply
  2. Hi! This plugin works for me, but only in debug mode 🙁 If i turn off debug, dosent send the user to my salesforce account. Any ideas?

    Thanks in advance 🙂

    Reply
    • Hi Benjamin,

      Are you using Google ReCaptcha by any chance? Also, are you getting any errors in the Network’s XHR tab?

      Best wishes
      Dragos

      Reply
      • Hi! Its working 😉 The thing is that its takes one hour aprox to show data in Salesforce. It could be something with my salesforce or my WordPress? I am using the code in a sandbox area.

        Thanks again and sorry for so many questions 🙁

        Reply
        • Hi Benjamin,

          I believe it’s usual with Salesforce to sometimes take a while to show up the data. It happed to me before also.

          Best wishes,
          Dragos

          Reply

Leave a Reply

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

dao tao ga choi can luu y nhung yeu to nao 15880 lo roi 3 ngay max88 so lon la gi bi lo de 1 an 99 dang nhap sv388 thao tac chi tiet game dan gian tien len mien namno hu jili goal123 slot 84617 baccarat onlinegsun club nap tien typhu88 va phuong thuc giao dich chuan xac hk68 slot 8585go66 nha cai tk814 va nhung sieu khuyen maimega 6 45 nohu52 no hu 27699casino bk8 az club sill win xoilac tv noi dem tat ca cac giai dau bong da ve voi man anh nho red88 8888 46357 chinh sach bao mat sunwin da ga jun88 noi ke thu thoa suc niem dam me phom pro san dinh max88 cach choi ca do bong da max88cwin ban ca