<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://sugarclub.sugarai.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form</link><pubDate>Tue, 18 Apr 2023 15:16:15 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:765da6f9-b3fe-43b7-89c8-73177c5ab020</guid><dc:creator>Rafael Fernandes</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form#comments</comments><description>Current Revision posted to Dev Tutorials by Rafael Fernandes on 4/18/2023 3:16:15 PM&lt;br /&gt;

&lt;p&gt;The Web-To-Lead Form is placed on a public website where you generate leads from prospective customers who visit the site.&lt;/p&gt;&lt;p&gt;To avoid spam bots to enter leads in Sugar a common solution is to add a reCAPTCHA in the form.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can add custom code to the lead capture process by creating the file SugarRoot/leadCapture_override.php.&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, due to the open defect &lt;a href="https://web.sugarcrm.com/support/issues/78741" rel="nofollow" target="_blank"&gt;#78741&lt;/a&gt;&amp;nbsp;the leadCapture_override.php is currently not being&amp;nbsp;read.&lt;/p&gt;&lt;p&gt;As we need this file to implement the server side of the reCAPTCHA, first of all, we&amp;nbsp;have to&amp;nbsp;override the &amp;quot;WebToLeadCapture&amp;quot; entry point to use a custom file that&amp;nbsp;will include the SugarRoot/leadCapture_override.php file.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1:&amp;nbsp;&lt;/strong&gt;Create the file &lt;strong&gt;SugarRoot/custom/Extension/application/Ext/EntryPointRegistry/WebToLeadCapture.php &lt;/strong&gt;with the content:&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$entry_point_registry&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;WebToLeadCapture&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;array&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="string token"&gt;&amp;#39;custom/WebToLeadCaptureOverride.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="token boolean"&gt;false&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 2:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- Create the file &lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&lt;/strong&gt; and copy all the content of the core file&amp;nbsp;&lt;strong&gt;modules/Campaigns/WebToLeadCapture.php&amp;nbsp;&lt;/strong&gt;to&amp;nbsp;inside that file&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-&amp;nbsp;&lt;/strong&gt;Add the following lines to the file&amp;nbsp;&lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&amp;nbsp;&lt;/strong&gt;just after the last require_once() and run a Quick Repair and Rebuild.&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;//Added to include leadCapture_override.php if exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;file_exists&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;include&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At the time that the #78741 gets solved the steps above will not be needed and we can start with step 4.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Generate a new Web-to-Lead form&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 5:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go through all the steps of the form generation as explained here and download the form.&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Access&amp;nbsp;&lt;a href="https://www.google.com/recaptcha/admin#list" rel="nofollow" target="_blank"&gt;https://www.google.com/recaptcha&lt;/a&gt;/, Navigate to My reCAPTCHA and register a new website.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Choose the reCAPTCHA type, insert the domain &lt;span style="text-decoration:underline;"&gt;where the form will be hosted&lt;/span&gt; and press Register.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png" alt=" " /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open the Web-to-Lead file in a text editor and copy the lines in the Client Side integration into your web to lead form:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 8:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the&amp;nbsp;SugarRoot/leadCapture_override file with the code below, replace the&amp;nbsp;reCaptcha_secret with&amp;nbsp;the value of your reCAPTCHA secret.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="php token"&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// Checking reCAPTCHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;Secret key&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;isset&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;&lt;span class="token function"&gt;empty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;g-recaptcha-response&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;curl_init&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &amp;quot;https&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.google.com/recaptcha/api/siteverify&amp;quot;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="string token"&gt;&amp;quot;secret=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;&amp;amp;response=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_output&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; curl_exec &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;json_decode&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_output&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt;&lt;span class="operator token"&gt;-&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt;&lt;span class="property token"&gt;success&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;===&lt;/span&gt; &lt;span class="token constant"&gt;FALSE&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="comment token"&gt;//Landing page for when the Captcha fails&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;header&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&amp;quot;Location&lt;span class="punctuation token"&gt;:&lt;/span&gt; http&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.yourlandingpage.com/&amp;quot;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;exit&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="delimiter token"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 9&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Place your Web-To-Lead form on your website&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For Sugar Cloud installations a package will have to be created and uploaded via Module Loader.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Check here how to create a package that copies files.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: web to lead form, captcha, recaptcha, spam&lt;/div&gt;
</description></item><item><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form/revision/5</link><pubDate>Fri, 05 Aug 2022 17:45:10 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:765da6f9-b3fe-43b7-89c8-73177c5ab020</guid><dc:creator>Alex Nassi</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form#comments</comments><description>Revision 5 posted to Dev Tutorials by Alex Nassi on 8/5/2022 5:45:10 PM&lt;br /&gt;

&lt;p&gt;The Web-To-Lead Form is placed on a public website where you generate leads from prospective customers who visit the site.&lt;/p&gt;&lt;p&gt;To avoid spam bots to enter leads in Sugar a common solution is to add a reCAPTCHA in the form.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can add custom code to the lead capture process by creating the file SugarRoot/leadCapture_override.php.&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, due to the open defect &lt;a href="https://web.sugarcrm.com/support/issues/78741" rel="nofollow" target="_blank"&gt;#78741&lt;/a&gt;&amp;nbsp;the leadCapture_override.php is currently not being&amp;nbsp;read.&lt;/p&gt;&lt;p&gt;As we need this file to implement the server side of the reCAPTCHA, first of all, we&amp;nbsp;have to&amp;nbsp;override the &amp;quot;WebToLeadCapture&amp;quot; entry point to use a custom file that&amp;nbsp;will include the SugarRoot/leadCapture_override.php file.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1:&amp;nbsp;&lt;/strong&gt;Create the file &lt;strong&gt;SugarRoot/custom/Extension/application/Ext/EntryPointRegistry/WebToLeadCapture.php &lt;/strong&gt;with the content:&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$entry_point_registry&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'WebToLeadCapture'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;array&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="string token"&gt;&amp;#39;custom/WebToLeadCaptureOverride.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="token boolean"&gt;false&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 2:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- Create the file &lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&lt;/strong&gt; and copy all the content of the core file&amp;nbsp;&lt;strong&gt;modules/Campaigns/WebToLeadCapture.php&amp;nbsp;&lt;/strong&gt;to&amp;nbsp;inside that file&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-&amp;nbsp;&lt;/strong&gt;Add the following lines to the file&amp;nbsp;&lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&amp;nbsp;&lt;/strong&gt;just after the last require_once() and run a Quick Repair and Rebuild.&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;//Added to include leadCapture_override.php if exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;file_exists&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;include&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At the time that the #78741 gets solved the steps above will not be needed and we can start with step 4.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Generate a new Web-to-Lead form&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 5:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go through all the steps of the form generation as explained here and download the form.&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Access&amp;nbsp;&lt;a href="https://www.google.com/recaptcha/admin#list" rel="nofollow" target="_blank"&gt;https://www.google.com/recaptcha&lt;/a&gt;/, Navigate to My reCAPTCHA and register a new website.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Choose the reCAPTCHA type, insert the domain &lt;span style="text-decoration:underline;"&gt;where the form will be hosted&lt;/span&gt; and press Register.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png" alt=" " /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open the Web-to-Lead file in a text editor and copy the lines in the Client Side integration into your web to lead form:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 8:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the&amp;nbsp;SugarRoot/leadCapture_override file with the code below, replace the&amp;nbsp;reCaptcha_secret with&amp;nbsp;the value of your reCAPTCHA secret.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="php token"&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// Checking reCAPTCHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;Secret key&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;isset&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;&lt;span class="token function"&gt;empty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'g-recaptcha-response'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;curl_init&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &amp;quot;https&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.google.com/recaptcha/api/siteverify&amp;quot;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="string token"&gt;&amp;quot;secret=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;&amp;amp;response=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_output&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; curl_exec &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;json_decode&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_output&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt;&lt;span class="operator token"&gt;-&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt;&lt;span class="property token"&gt;success&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;===&lt;/span&gt; &lt;span class="token constant"&gt;FALSE&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="comment token"&gt;//Landing page for when the Captcha fails&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;header&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&amp;quot;Location&lt;span class="punctuation token"&gt;:&lt;/span&gt; http&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.yourlandingpage.com/&amp;quot;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;exit&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="delimiter token"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 9&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Place your Web-To-Lead form on your website&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For Sugar Cloud installations a package will have to be created and uploaded via Module Loader.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Check here how to create a package that copies files.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: web to lead form, captcha, recaptcha, spam&lt;/div&gt;
</description></item><item><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form/revision/4</link><pubDate>Wed, 07 Jul 2021 20:00:20 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:765da6f9-b3fe-43b7-89c8-73177c5ab020</guid><dc:creator>Matt Marum</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form#comments</comments><description>Revision 4 posted to Dev Tutorials by Matt Marum on 7/7/2021 8:00:20 PM&lt;br /&gt;

&lt;p&gt;The Web-To-Lead Form is placed on a public website where you generate leads from prospective customers who visit the site.&lt;/p&gt;&lt;p&gt;To avoid spam bots to enter leads in Sugar a common solution is to add a reCAPTCHA in the form.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can add custom code to the lead capture process by creating the file SugarRoot/leadCapture_override.php.&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, due to the open defect &lt;a href="https://web.sugarcrm.com/support/issues/78741" rel="nofollow" target="_blank"&gt;#78741&lt;/a&gt;&amp;nbsp;the leadCapture_override.php is currently not being&amp;nbsp;read.&lt;/p&gt;&lt;p&gt;As we need this file to implement the server side of the reCAPTCHA, first of all, we&amp;nbsp;have to&amp;nbsp;override the &amp;quot;WebToLeadCapture&amp;quot; entry point to use a custom file that&amp;nbsp;will include the SugarRoot/leadCapture_override.php file.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1:&amp;nbsp;&lt;/strong&gt;Create the file &lt;strong&gt;SugarRoot/custom/Extension/application/Ext/EntryPointRegistry/WebToLeadCapture.php &lt;/strong&gt;with the content:&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$entry_point_registry&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'WebToLeadCapture'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;array&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="string token"&gt;&amp;#39;custom/WebToLeadCaptureOverride.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="token boolean"&gt;false&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 2:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- Create the file &lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&lt;/strong&gt; and copy all the content of the core file&amp;nbsp;&lt;strong&gt;modules/Campaigns/WebToLeadCapture.php&amp;nbsp;&lt;/strong&gt;to&amp;nbsp;inside that file&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-&amp;nbsp;&lt;/strong&gt;Add the following lines to the file&amp;nbsp;&lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&amp;nbsp;&lt;/strong&gt;just after the last require_once() and run a Quick Repair and Rebuild.&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;//Added to include leadCapture_override.php if exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;file_exists&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;include&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At the time that the #78741 gets solved the steps above will not be needed and we can start with step 4.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Generate a new Web-to-Lead form&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 5:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go through all the steps of the form generation as explained &lt;a href="http://support.sugarcrm.com/Knowledge_Base/Campaigns_Target_Lists/Creating_a_Web-to-Lead_Form/index.html" rel="nofollow" target="_blank"&gt;here&lt;/a&gt; and download the form.&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Access&amp;nbsp;&lt;a href="https://www.google.com/recaptcha/admin#list" rel="nofollow" target="_blank"&gt;https://www.google.com/recaptcha&lt;/a&gt;/, Navigate to My reCAPTCHA and register a new website.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Choose the reCAPTCHA type, insert the domain &lt;span style="text-decoration:underline;"&gt;where the form will be hosted&lt;/span&gt; and press Register.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png" alt=" " /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open the Web-to-Lead file in a text editor and copy the lines in the Client Side integration into your web to lead form:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 8:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the&amp;nbsp;SugarRoot/leadCapture_override file with the code below, replace the&amp;nbsp;reCaptcha_secret with&amp;nbsp;the value of your reCAPTCHA secret.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="php token"&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// Checking reCAPTCHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;Secret key&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;isset&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;&lt;span class="token function"&gt;empty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'g-recaptcha-response'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;curl_init&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &amp;quot;https&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.google.com/recaptcha/api/siteverify&amp;quot;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="string token"&gt;&amp;quot;secret=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;&amp;amp;response=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_output&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; curl_exec &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;json_decode&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_output&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt;&lt;span class="operator token"&gt;-&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt;&lt;span class="property token"&gt;success&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;===&lt;/span&gt; &lt;span class="token constant"&gt;FALSE&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="comment token"&gt;//Landing page for when the Captcha fails&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;header&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&amp;quot;Location&lt;span class="punctuation token"&gt;:&lt;/span&gt; http&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.yourlandingpage.com/&amp;quot;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;exit&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="delimiter token"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 9&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Place your Web-To-Lead form on your website&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For Sugar Cloud installations a package will have to be created and uploaded via Module Loader.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Check here how to &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_8.0/Cookbook/Module_Loadable_Packages/Creating_an_Installable_Package_That_Copies_Files/index.html" rel="nofollow" target="_blank"&gt;create a package that copies files&lt;/a&gt;.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: web to lead form, captcha, recaptcha, spam&lt;/div&gt;
</description></item><item><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form/revision/3</link><pubDate>Sun, 02 Aug 2020 06:49:44 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:765da6f9-b3fe-43b7-89c8-73177c5ab020</guid><dc:creator>Andre Serrazina</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form#comments</comments><description>Revision 3 posted to Dev Tutorials by Andre Serrazina on 8/2/2020 6:49:44 AM&lt;br /&gt;

&lt;p&gt;The Web-To-Lead Form is placed on a public website where you generate leads from prospective customers who visit the site.&lt;/p&gt;&lt;p&gt;To avoid spam bots to enter leads in Sugar a common solution is to add a reCAPTCHA in the form.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can add custom code to the lead capture process by creating the file SugarRoot/leadCapture_override.php.&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, due to the open defect &lt;a href="https://web.sugarcrm.com/support/issues/78741" rel="nofollow" target="_blank"&gt;#78741&lt;/a&gt;&amp;nbsp;the leadCapture_override.php is currently not being&amp;nbsp;read.&lt;/p&gt;&lt;p&gt;As we need this file to implement the server side of the reCAPTCHA, first of all, we&amp;nbsp;have to&amp;nbsp;override the &amp;quot;WebToLeadCapture&amp;quot; entry point to use a custom file that&amp;nbsp;will include the SugarRoot/leadCapture_override.php file.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1:&amp;nbsp;&lt;/strong&gt;Create the file &lt;strong&gt;SugarRoot/custom/Extension/application/Ext/EntryPointRegistry/WebToLeadCapture.php &lt;/strong&gt;with the content:&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$entry_point_registry&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'WebToLeadCapture'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;array&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="string token"&gt;&amp;#39;custom/WebToLeadCaptureOverride.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="token boolean"&gt;false&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 2:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- Create the file &lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&lt;/strong&gt; and copy all the content of the core file&amp;nbsp;&lt;strong&gt;modules/Campaigns/WebToLeadCapture.php&amp;nbsp;&lt;/strong&gt;to&amp;nbsp;inside that file&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-&amp;nbsp;&lt;/strong&gt;Add the following lines to the file&amp;nbsp;&lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&amp;nbsp;&lt;/strong&gt;just after the last require_once() and run a Quick Repair and Rebuild.&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;//Added to include leadCapture_override.php if exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;file_exists&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;include&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At the time that the #78741 gets solved the steps above will not be needed and we can start with step 4.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Generate a new Web-to-Lead form&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/5228._5F00_pastedImage_5F00_6.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 5:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go through all the steps of the form generation as explained &lt;a href="http://support.sugarcrm.com/Knowledge_Base/Campaigns_Target_Lists/Creating_a_Web-to-Lead_Form/index.html" rel="nofollow" target="_blank"&gt;here&lt;/a&gt; and download the form.&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4024._5F00_pastedImage_5F00_9.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Access&amp;nbsp;&lt;a href="https://www.google.com/recaptcha/admin#list" rel="nofollow" target="_blank"&gt;https://www.google.com/recaptcha&lt;/a&gt;/, Navigate to My reCAPTCHA and register a new website.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Choose the reCAPTCHA type, insert the domain &lt;span style="text-decoration:underline;"&gt;where the form will be hosted&lt;/span&gt; and press Register.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/3531._5F00_pastedImage_5F00_12.png" alt=" " /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open the Web-to-Lead file in a text editor and copy the lines in the Client Side integration into your web to lead form:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/2870._5F00_pastedImage_5F00_16.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6472._5F00_pastedImage_5F00_17.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 8:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the&amp;nbsp;SugarRoot/leadCapture_override file with the code below, replace the&amp;nbsp;reCaptcha_secret with&amp;nbsp;the value of your reCAPTCHA secret.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4810._5F00_pastedImage_5F00_20.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="php token"&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// Checking reCAPTCHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;Secret key&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;isset&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;&lt;span class="token function"&gt;empty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'g-recaptcha-response'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;curl_init&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &amp;quot;https&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.google.com/recaptcha/api/siteverify&amp;quot;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="string token"&gt;&amp;quot;secret=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;&amp;amp;response=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_output&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; curl_exec &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;json_decode&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_output&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt;&lt;span class="operator token"&gt;-&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt;&lt;span class="property token"&gt;success&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;===&lt;/span&gt; &lt;span class="token constant"&gt;FALSE&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="comment token"&gt;//Landing page for when the Captcha fails&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;header&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&amp;quot;Location&lt;span class="punctuation token"&gt;:&lt;/span&gt; http&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.yourlandingpage.com/&amp;quot;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;exit&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="delimiter token"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 9&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Place your Web-To-Lead form on your website&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/6165._5F00_pastedImage_5F00_19.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For Sugar Cloud installations a package will have to be created and uploaded via Module Loader.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Check here how to &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_8.0/Cookbook/Module_Loadable_Packages/Creating_an_Installable_Package_That_Copies_Files/index.html" rel="nofollow" target="_blank"&gt;create a package that copies files&lt;/a&gt;.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: web to lead form, captcha, recaptcha, spam&lt;/div&gt;
</description></item><item><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form/revision/2</link><pubDate>Fri, 31 Jul 2020 20:30:14 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:765da6f9-b3fe-43b7-89c8-73177c5ab020</guid><dc:creator>Andre Serrazina</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form#comments</comments><description>Revision 2 posted to Dev Tutorials by Andre Serrazina on 7/31/2020 8:30:14 PM&lt;br /&gt;

&lt;p&gt;The Web-To-Lead Form is placed on a public website where you generate leads from prospective customers who visit the site.&lt;/p&gt;&lt;p&gt;To avoid spam bots to enter leads in Sugar a common solution is to add a reCAPTCHA in the form.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can add custom code to the lead capture process by creating the file SugarRoot/leadCapture_override.php.&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, due to the open defect &lt;a href="https://web.sugarcrm.com/support/issues/78741" rel="nofollow" target="_blank"&gt;#78741&lt;/a&gt;&amp;nbsp;the leadCapture_override.php is currently not being&amp;nbsp;read.&lt;/p&gt;&lt;p&gt;As we need this file to implement the server side of the reCAPTCHA, first of all, we&amp;nbsp;have to&amp;nbsp;override the &amp;quot;WebToLeadCapture&amp;quot; entry point to use a custom file that&amp;nbsp;will include the SugarRoot/leadCapture_override.php file.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1:&amp;nbsp;&lt;/strong&gt;Create the file &lt;strong&gt;SugarRoot/custom/Extension/application/Ext/EntryPointRegistry/WebToLeadCapture.php &lt;/strong&gt;with the content:&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$entry_point_registry&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'WebToLeadCapture'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;array&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="string token"&gt;&amp;#39;custom/WebToLeadCaptureOverride.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="token boolean"&gt;false&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 2:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;- Create the file &lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&lt;/strong&gt; and copy all the content of the core file&amp;nbsp;&lt;strong&gt;modules/Campaigns/WebToLeadCapture.php&amp;nbsp;&lt;/strong&gt;to&amp;nbsp;inside that file&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-&amp;nbsp;&lt;/strong&gt;Add the following lines to the file&amp;nbsp;&lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&amp;nbsp;&lt;/strong&gt;just after the last require_once() and run a Quick Repair and Rebuild.&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;//Added to include leadCapture_override.php if exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;file_exists&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;include&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At the time that the #78741 gets solved the steps above will not be needed and we can start with step 4.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Generate a new Web-to-Lead form&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_6.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_6.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 5:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go through all the steps of the form generation as explained &lt;a href="http://support.sugarcrm.com/Knowledge_Base/Campaigns_Target_Lists/Creating_a_Web-to-Lead_Form/index.html" rel="nofollow" target="_blank"&gt;here&lt;/a&gt; and download the form.&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_9.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_9.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Access&amp;nbsp;&lt;a href="https://www.google.com/recaptcha/admin#list" rel="nofollow" target="_blank"&gt;https://www.google.com/recaptcha&lt;/a&gt;/, Navigate to My reCAPTCHA and register a new website.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Choose the reCAPTCHA type, insert the domain &lt;span style="text-decoration:underline;"&gt;where the form will be hosted&lt;/span&gt; and press Register.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_12.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_12.png" alt=" " /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open the Web-to-Lead file in a text editor and copy the lines in the Client Side integration into your web to lead form:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_16.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_16.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_17.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_17.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 8:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the&amp;nbsp;SugarRoot/leadCapture_override file with the code below, replace the&amp;nbsp;reCaptcha_secret with&amp;nbsp;the value of your reCAPTCHA secret.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_20.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/_5F00_pastedImage_5F00_20.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="php token"&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// Checking reCAPTCHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;Secret key&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;isset&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;&lt;span class="token function"&gt;empty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'g-recaptcha-response'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;curl_init&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &amp;quot;https&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.google.com/recaptcha/api/siteverify&amp;quot;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="string token"&gt;&amp;quot;secret=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;&amp;amp;response=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_output&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; curl_exec &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;json_decode&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_output&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt;&lt;span class="operator token"&gt;-&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt;&lt;span class="property token"&gt;success&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;===&lt;/span&gt; &lt;span class="token constant"&gt;FALSE&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="comment token"&gt;//Landing page for when the Captcha fails&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;header&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&amp;quot;Location&lt;span class="punctuation token"&gt;:&lt;/span&gt; http&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.yourlandingpage.com/&amp;quot;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;exit&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="delimiter token"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 9&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Place your Web-To-Lead form on your website&lt;/p&gt;&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4300._5F00_pastedImage_5F00_19.png"&gt;&lt;img src="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-00-14/4300._5F00_pastedImage_5F00_19.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For Sugar Cloud installations a package will have to be created and uploaded via Module Loader.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Check here how to &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_8.0/Cookbook/Module_Loadable_Packages/Creating_an_Installable_Package_That_Copies_Files/index.html" rel="nofollow" target="_blank"&gt;create a package that copies files&lt;/a&gt;.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: web to lead form, captcha, recaptcha, spam&lt;/div&gt;
</description></item><item><title>Adding a google reCAPTCHA in a Web-to-Lead form</title><link>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form/revision/1</link><pubDate>Mon, 27 Jul 2020 10:27:34 GMT</pubDate><guid isPermaLink="false">5c521d64-519d-47a6-9065-134618b211bf:765da6f9-b3fe-43b7-89c8-73177c5ab020</guid><dc:creator>Andre Serrazina</dc:creator><comments>https://sugarclub.sugarai.com/dev-club/w/dev-tutorials/197/adding-a-google-recaptcha-in-a-web-to-lead-form#comments</comments><description>Revision 1 posted to Dev Tutorials by Andre Serrazina on 7/27/2020 10:27:34 AM&lt;br /&gt;

&lt;p&gt;The Web-To-Lead Form is placed on a public website where you generate leads from prospective customers who visit the site.&lt;/p&gt;&lt;p&gt;To avoid spam bots to enter leads in Sugar a common solution is to add a reCAPTCHA in the form.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;We can add custom code to the lead capture process by creating the file SugarRoot/leadCapture_override.php.&amp;nbsp;&lt;/p&gt;&lt;p&gt;However, due to the open defect &lt;a href="https://web.sugarcrm.com/support/issues/78741" rel="nofollow" target="_blank"&gt;#78741&lt;/a&gt;&amp;nbsp;the leadCapture_override.php is currently not being&amp;nbsp;read.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;As we need this file to implement the server side of the reCAPTCHA, first of all, we&amp;nbsp;have to&amp;nbsp;override the &amp;quot;WebToLeadCapture&amp;quot; entry point to use a custom file that&amp;nbsp;will include the SugarRoot/leadCapture_override.php file.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1:&amp;nbsp;&lt;/strong&gt;Create the file &lt;strong&gt;SugarRoot/custom/Extension/application/Ext/EntryPointRegistry/WebToLeadCapture.php &lt;/strong&gt;with the content:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$entry_point_registry&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'WebToLeadCapture'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="keyword token"&gt;array&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="string token"&gt;&amp;#39;custom/WebToLeadCaptureOverride.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="string token"&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt; &lt;span class="token boolean"&gt;false&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 2:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;- Create the file &lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&lt;/strong&gt; and copy all the content of the core file&amp;nbsp;&lt;strong&gt;modules/Campaigns/WebToLeadCapture.php&amp;nbsp;&lt;/strong&gt;to&amp;nbsp;inside that file&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;-&amp;nbsp;&lt;/strong&gt;Add the following lines to the file&amp;nbsp;&lt;strong&gt;SugarRoot/custom/WebToLeadCaptureOverride.php&amp;nbsp;&lt;/strong&gt;just after the last require_once() and run a Quick Repair and Rebuild.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="comment token"&gt;//Added to include leadCapture_override.php if exists&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;file_exists&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;include&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="string token"&gt;&amp;#39;leadCapture_override.php&amp;#39;&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;At the time that the #78741 gets solved the steps above will not be needed and we can start with step 4.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Generate a new Web-to-Lead form&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/d25b21e6_2D00_e09d_2D00_498a_2D00_bde0_2D00_2a0ede956a8c-3525-complete/pastedImage_5F00_6.png"&gt;pastedImage_6.png&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 5:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go through all the steps of the form generation as explained &lt;a href="http://support.sugarcrm.com/Knowledge_Base/Campaigns_Target_Lists/Creating_a_Web-to-Lead_Form/index.html" rel="nofollow" target="_blank"&gt;here&lt;/a&gt; and download the form.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/a5c89a0f_2D00_cfb0_2D00_4e4e_2D00_b853_2D00_e7da7f743e8a-3525-complete/pastedImage_5F00_9.png"&gt;pastedImage_9.png&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Access&amp;nbsp;&lt;a href="https://www.google.com/recaptcha/admin#list" rel="nofollow" target="_blank"&gt;https://www.google.com/recaptcha&lt;/a&gt;/, Navigate to My reCAPTCHA and register a new website.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Choose the reCAPTCHA type, insert the domain &lt;span style="text-decoration:underline;"&gt;where the form will be hosted&lt;/span&gt; and press Register.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/951f93ce_2D00_f63d_2D00_464f_2D00_ae5b_2D00_0824d0e93325-3525-complete/pastedImage_5F00_12.png"&gt;pastedImage_12.png&lt;/a&gt;&lt;/p&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Open the Web-to-Lead file in a text editor and copy the lines in the Client Side integration into your web to lead form:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/a749b883_2D00_36d9_2D00_4087_2D00_aaac_2D00_48a1364a4fc9-3525-complete/pastedImage_5F00_16.png"&gt;pastedImage_16.png&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/ca4c1ab0_2D00_5efa_2D00_45fb_2D00_af15_2D00_0d29f4736dbc-3525-complete/pastedImage_5F00_17.png"&gt;pastedImage_17.png&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 8:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Create the&amp;nbsp;SugarRoot/leadCapture_override file with the code below, replace the&amp;nbsp;reCaptcha_secret with&amp;nbsp;the value of your reCAPTCHA secret.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/e7a7da1a_2D00_e1de_2D00_4378_2D00_8309_2D00_d1f6cfb2db2c-3525-complete/pastedImage_5F00_20.png"&gt;pastedImage_20.png&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="language-php line-numbers"&gt;&lt;code&gt;&lt;span class="php token"&gt;&lt;span class="delimiter token"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span class="comment token"&gt;// Checking reCAPTCHA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;Secret key&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword token"&gt;if&lt;/span&gt; &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="token function"&gt;isset&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="operator token"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="operator token"&gt;!&lt;/span&gt;&lt;span class="token function"&gt;empty&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt; &lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;[&lt;/span&gt;&lt;span class="string token"&gt;'g-recaptcha-response'&lt;/span&gt;&lt;span class="punctuation token"&gt;]&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;curl_init&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &amp;quot;https&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.google.com/recaptcha/api/siteverify&amp;quot;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_verify_url&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="string token"&gt;&amp;quot;secret=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$recaptcha_site_secret&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="string token"&gt;&amp;quot;&amp;amp;response=&amp;quot;&lt;/span&gt;&lt;span class="punctuation token"&gt;.&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_response&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;curl_setopt&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token constant"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="punctuation token"&gt;,&lt;/span&gt; &lt;span class="token boolean"&gt;true&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_output&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; curl_exec &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_close &lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$curl&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="token function"&gt;json_decode&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_output&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;=&lt;/span&gt; &lt;span class="variable token"&gt;$decoded_captcha&lt;/span&gt;&lt;span class="operator token"&gt;-&lt;/span&gt;&lt;span class="operator token"&gt;&amp;gt;&lt;/span&gt;&lt;span class="property token"&gt;success&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="keyword token"&gt;if&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="variable token"&gt;$captcha_status&lt;/span&gt; &lt;span class="operator token"&gt;===&lt;/span&gt; &lt;span class="token constant"&gt;FALSE&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="comment token"&gt;//Landing page for when the Captcha fails&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;header&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&amp;quot;Location&lt;span class="punctuation token"&gt;:&lt;/span&gt; http&lt;span class="punctuation token"&gt;:&lt;/span&gt;&lt;span class="comment token"&gt;//www.yourlandingpage.com/&amp;quot;);&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="token function"&gt;exit&lt;/span&gt;&lt;span class="punctuation token"&gt;(&lt;/span&gt;&lt;span class="punctuation token"&gt;)&lt;/span&gt;&lt;span class="punctuation token"&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="punctuation token"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="delimiter token"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line-numbers-rows"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 9&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Place your Web-To-Lead form on your website&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://sugarclub.sugarai.com/cfs-file/__key/CommunityServer-Components-MultipleUploadFileManager/09c1a189_2D00_6df5_2D00_460c_2D00_8309_2D00_3b5a7fcff4b2-3525-complete/pastedImage_5F00_19.png"&gt;pastedImage_19.png&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For Sugar Cloud installations a package will have to be created and uploaded via Module Loader.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Check here how to &lt;a href="http://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_8.0/Cookbook/Module_Loadable_Packages/Creating_an_Installable_Package_That_Copies_Files/index.html" rel="nofollow" target="_blank"&gt;create a package that copies files&lt;/a&gt;.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: web to lead form, captcha, recaptcha, spam&lt;/div&gt;
</description></item></channel></rss>