Для многих бизнесов, использующих 1С для учета и управления, важным этапом является интеграция с формами обратной связи на сайте. Contact Form 7 — популярный плагин WordPress для создания форм, который можно легко настроить для отправки данных в 1С через Webhook. В этой статье я подробно расскажу, как реализовать такую интеграцию, приведу примеры кода и полезные советы для успешной настройки.
Почему именно Webhook для интеграции Contact Form 7 с 1С?
Webhook — это метод, при котором данные автоматически отправляются с вашего сайта на заданный URL в режиме реального времени. Для интеграции Contact Form 7 и 1С это очень удобно, так как:
- Отправка происходит мгновенно после заполнения формы пользователем.
- Не требуется частый опрос сервера 1С — нагрузка минимальна.
- Можно легко настроить передачу любых полей формы в формате JSON или URL-encoded.
Таким образом, Webhook обеспечивает надежную и оперативную связь между сайтом и 1С без лишних сложностей.
Подготовка 1С к приему данных из Contact Form 7
Для начала нужно убедиться, что в 1С настроен внешний HTTP-сервис для приема данных в формате JSON или form-data. В 1С обычно создается HTTP-сервис, который принимает POST-запросы с определенной структурой данных и обрабатывает их.
Примерная структура данных, которую 1С ожидает — это JSON с ключами, совпадающими с полями формы:
{
"name": "Иван Иванов",
"email": "ivan@example.com",
"phone": "+7 999 123-45-67",
"comment": "Интересует консультация"
}В 1С необходимо реализовать обработчик, который десериализует JSON и создает заявку/контакт в базе.
Настройка Contact Form 7 для отправки данных через Webhook
Contact Form 7 сам по себе не имеет встроенной функции отправки на сторонние URL, но для этого можно использовать хуки WordPress и небольшой PHP-код, который выполнит POST-запрос при отправке формы.
Добавим в functions.php вашей темы следующий код:
add_action('wpcf7_mail_sent', 'contactform7ru_send_to_1c_webhook');
function contactform7ru_send_to_1c_webhook($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) return;
$data = $submission->get_posted_data();
// Формируем массив с нужными данными для 1С
$payload = array(
'name' => $data['your-name'] ?? '',
'email' => $data['your-email'] ?? '',
'phone' => $data['your-phone'] ?? '',
'comment' => $data['your-message'] ?? ''
);
$webhook_url = 'https://your1cserver.example.com/api/webhook'; // Замените на URL вашего 1С
// Отправляем POST запрос в 1С
$response = wp_remote_post($webhook_url, array(
'method' => 'POST',
'headers' => array('Content-Type' => 'application/json'),
'body' => json_encode($payload),
'timeout' => 10
));
if (is_wp_error($response)) {
error_log('ContactForm7RU: Ошибка отправки данных в 1С - ' . $response->get_error_message());
} else {
error_log('ContactForm7RU: Данные успешно отправлены в 1С, код ответа: ' . wp_remote_retrieve_response_code($response));
}
}В этом коде:
- Используется хук
wpcf7_mail_sent, чтобы сработать после успешной отправки формы. - Получаем данные формы через объект
WPCF7_Submission. - Формируем массив с ключами, подходящими для 1С.
- Отправляем POST-запрос с JSON на URL 1С.
- Добавляем логирование ошибок для отладки.
Обработка ошибок и отладка интеграции
При работе с Webhook важно предусмотреть обработку ошибок и контроль успешности отправки данных:
- Проверяйте в логах WordPress наличие ошибок отправки в 1С.
- На стороне 1С убедитесь, что сервис доступен и возвращает корректные коды ответа (200 OK).
- Для улучшения UX можно настроить в Contact Form 7 отображение сообщений об ошибках при сбое отправки данных в 1С — например, используя дополнительный фильтр и AJAX.
Пример простого расширения для вывода ошибки при сбое отправки:
add_filter('wpcf7_ajax_json_echo', 'contactform7ru_modify_ajax_response', 10, 2);
function contactform7ru_modify_ajax_response($response, $result) {
if ($result['status'] === 'mail_sent') {
// Проверим логи или статус отправки в 1С и при ошибке изменим статус
// Можно реализовать глобальную переменную или сессию для передачи ошибки из функции отправки
}
return $response;
}Расширенные сценарии: отправка файлов и дополнительных данных
Если в форме Contact Form 7 есть поле загрузки файла, и его нужно передать в 1С, то задача усложняется. Формат JSON не подходит для отправки больших файлов напрямую. В таком случае:
- Можно отправить ссылку на загруженный файл, если он сохраняется на сервере.
- Или реализовать multipart/form-data POST запрос с использованием библиотеки cURL в PHP.
Пример отправки файла через cURL:
function contactform7ru_send_file_to_1c($file_path, $webhook_url) {
$curl = curl_init();
$post_fields = array(
'file' => new CURLFile($file_path)
);
curl_setopt_array($curl, array(
CURLOPT_URL => $webhook_url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post_fields,
CURLOPT_RETURNTRANSFER => true
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
error_log('ContactForm7RU: Ошибка отправки файла в 1С: ' . $err);
return false;
}
return $response;
}Этот код можно внедрить в основную функцию для отправки данных.
Заключение: автоматизация и эффективность
Интеграция Contact Form 7 с 1С через Webhook позволяет автоматизировать передачу данных из сайта в учетную систему, что экономит время и снижает ошибки ручного ввода. Используя приведенный пример и рекомендации, вы сможете настроить надежный обмен данными, учитывая особенности своей 1С и структуры форм.
Для расширения возможностей формы и удобства работы с данными можно также рассмотреть плагины, оптимизирующие работу Contact Form 7 или интеграцию с CRM, например, с поддержкой Webhook и REST API. Подробнее такие решения представлены на WPSHOP.ru.