refineddigital / cms-form-builder-zoho
Zoho integration for Form Builder
Package info
github.com/refined-digital/refined-cms-form-builder-zoho
pkg:composer/refineddigital/cms-form-builder-zoho
v1.1.0
2026-10-27 03:56 UTC
Requires
- php: ^8.4
- refineddigital/cms: ^1.36|dev-master
- refineddigital/cms-form-builder: ^1.13|dev-master
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
A Zoho CRM integration for RefinedCMS Form Builder. On submit, the form's mapped field values are posted to Zoho's Web-to-Lead endpoint, creating a lead. No SDK or API token: it uses Laravel's HTTP client and the keys of a Zoho Web-to-Lead form.
Install
composer require refineddigital/cms-form-builder-zoho php artisan refinedCMS:install-form-builder-zoho
The install command publishes the config (config/zoho.php) and appends ZOHO_ERROR_EMAIL= to your .env if it isn't there.
Zoho setup
- In Zoho CRM go to Setup → Developer Hub → Webforms and create a Leads web form.
- From its embed code, copy the hidden
xnQsjsdp,xmIwtLDandactionTypevalues. - Set
ZOHO_URLif the account isn't on the Australian data centre (defaulthttps://crm.zoho.com.au/crm/WebToLeadForm).
Connecting a form
- Edit the form, open Integrations and toggle Zoho CRM on.
- Set each field's Merge Field to the Zoho field name:
First Name,Last Name,Email,Phone,Zip Code, a custom field such asLEADCF2… - Add the web form keys and any fixed lead values as hidden fields where the site renders the form. Use
__for a space in a name (Lead__Sourceis sent asLead Source):
{!! forms()->load(1)->setAdditionalHiddenFields([
(object) ['view' => 'hidden', 'field_name' => 'xnQsjsdp', 'value' => '…'],
(object) ['view' => 'hidden', 'field_name' => 'xmIwtLD', 'value' => '…'],
(object) ['view' => 'hidden', 'field_name' => 'actionType', 'value' => 'TGVhZHM='],
(object) ['view' => 'hidden', 'field_name' => 'Lead__Source', 'value' => 'Website'],
])->render() !!}
Behaviour
- Description. Every field mapped to
Descriptionis sent as oneLabel: valueline in the lead's description, so several questions can share it. - Pass-through. Any posted value that isn't a form field (and isn't the CSRF token or captcha) is sent as-is, which is how the hidden fields above arrive.
- Configure. Fields toggled off in the Configure modal aren't sent. A form whose modal was never saved sends every mapped field.
- Checkbox / multi-select values are joined with
;. - Failures never block a submission. HTTP errors are
report()ed. IfZOHO_ERROR_EMAILis set, an alert with the form name and reason goes there. - No email. Notifications are the form's own Email Notifications. The integration never sends them.