Интеграция Contact Form 7 с внешними сервисами через REST API — востребованная задача для многих разработчиков и владельцев сайтов на WordPress. В этой статье подробно разберём, как настроить Contact Form 7 для отправки данных формы на внешний сервер с помощью REST API. Это позволит расширить возможности сбора и обработки данных, например, отправлять заявки в CRM-системы, сервисы аналитики или другие платформы.
Почему стоит использовать REST API для передачи данных из Contact Form 7
Contact Form 7 по умолчанию отправляет данные форм на email. Однако часто требуется интеграция с внешними системами для автоматизации бизнес-процессов. REST API — современный, универсальный и безопасный способ передачи данных. Он поддерживает передачу данных в формате JSON, позволяет работать с авторизацией и легко масштабируется.
Преимущества использования REST API с Contact Form 7:
- Автоматическая передача данных в CRM, ERP, маркетинговые платформы;
- Возможность гибкой обработки данных на стороне сервера;
- Уменьшение ошибок ручного ввода и ускорение обработки;
- Возможность использовать современные методы аутентификации и шифрования.
Как реализовать отправку данных Contact Form 7 на внешний REST API
Для реализации нам потребуется использовать хук wpcf7_mail_sent, который срабатывает после успешной отправки формы. В обработчике мы соберём данные формы и отправим их на внешний сервер с помощью функции wp_remote_post.
Пошаговая инструкция
- Определите URL вашего внешнего REST API и требования к формату данных.
- Добавьте следующий код в файл
functions.phpвашей темы или в отдельный плагин.
add_action('wpcf7_mail_sent', 'contactform7_send_to_external_api');
function contactform7_send_to_external_api($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$data = $submission->get_posted_data();
// Здесь укажите ID вашей формы Contact Form 7 для фильтрации
if ($contact_form->id() != 1234) {
return;
}
// Формируем массив данных для отправки
$api_data = array(
'name' => isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '',
'email' => isset($data['your-email']) ? sanitize_email($data['your-email']) : '',
'message' => isset($data['your-message']) ? sanitize_textarea_field($data['your-message']) : '',
);
// Опции запроса
$args = array(
'body' => json_encode($api_data),
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer your_api_token_here'
),
'timeout' => 15
);
$response = wp_remote_post('https://external-api.example.com/endpoint', $args);
if (is_wp_error($response)) {
error_log('Contact Form 7 API error: ' . $response->get_error_message());
} else {
$code = wp_remote_retrieve_response_code($response);
if ($code != 200 && $code != 201) {
error_log('Contact Form 7 API returned HTTP code: ' . $code);
}
}
}
В данном примере функция contactform7_send_to_external_api получает данные формы с ID 1234, формирует JSON и отправляет POST-запрос на внешний сервер с заголовком авторизации. Обратите внимание, что нужно заменить URL и токен на ваши реальные значения.
Обработка ошибок и логирование
Очень важно обрабатывать возможные ошибки при отправке запросов. В приведённом примере мы используем error_log для записи ошибок в лог PHP. Вы можете расширить этот функционал, например, отправлять уведомления администратору или сохранять ошибки в отдельную таблицу базы данных.
Для более удобного мониторинга ошибок советую использовать плагины типа Clearfy Pro, которые помогают управлять логами и оптимизировать работу сайта.
Дополнительные советы по безопасности и расширению
При работе с REST API учитывайте следующие рекомендации:
- Используйте HTTPS для шифрования данных при передаче.
- Настройте аутентификацию (например, OAuth, Bearer токены) на стороне API.
- Проверяйте и валидируйте все входящие данные для предотвращения инъекций.
- Ограничивайте количество запросов к API (rate limiting) для защиты от перегрузок.
- При необходимости добавьте дополнительные поля в форму и в payload для передачи специфичных данных.
Динамическая отправка данных с учетом разных форм
Если на сайте несколько форм, и каждая должна отправлять разные данные на разные URL, можно расширить функцию, например, так:
function contactform7_send_to_external_api($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$data = $submission->get_posted_data();
$form_id = $contact_form->id();
switch ($form_id) {
case 1234:
$url = 'https://api1.example.com/endpoint';
$api_data = array(
'name' => sanitize_text_field($data['your-name']),
'email' => sanitize_email($data['your-email']),
);
break;
case 5678:
$url = 'https://api2.example.com/submit';
$api_data = array(
'phone' => sanitize_text_field($data['your-phone']),
'message' => sanitize_textarea_field($data['your-message']),
);
break;
default:
return;
}
$args = array(
'body' => json_encode($api_data),
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer your_api_token'
),
'timeout' => 15
);
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
error_log('CF7 API error: ' . $response->get_error_message());
} else {
$code = wp_remote_retrieve_response_code($response);
if ($code < 200 || $code >= 300) {
error_log('CF7 API HTTP code: ' . $code);
}
}
}
Такой подход позволит централизованно управлять отправкой данных из разных форм и интеграциями.
Плагины для расширения возможностей Contact Form 7 и интеграции с API
Если вы не хотите писать код самостоятельно, обратите внимание на плагины, которые облегчают интеграцию Contact Form 7 с внешними сервисами через REST API:
- Contact Form 7 Webhook — позволяет настроить отправку данных на любой URL по Webhook с гибкими параметрами;
- Clearfy Pro — многофункциональный плагин для оптимизации и безопасности WordPress, в том числе удобен для настройки интеграций;
- Плагины для интеграции с популярными CRM и маркетинговыми сервисами, многие из которых поддерживают REST API;
Выводы
Отправка данных Contact Form 7 на внешний сервер через REST API — мощный инструмент для автоматизации и расширения функциональности сайта. Используя хук wpcf7_mail_sent и функцию wp_remote_post, можно быстро настроить передачу данных на любые API с учётом требований безопасности и валидации.
Если вы хотите быстро и удобно интегрироваться без программирования, обратите внимание на специализированные плагины с поддержкой webhook.