Вебхуки с блока "Лид-форма"
Опубликовано 1 Июль, 2021 | Функции | 1 504 просмотров | 1 минут уйдет на чтение
Как включить вебхуки
Открыть настройки блока "Форма и платежи"
Включить чекбоксы "Отправить webhook" на вкладках "Действия после заполнения формы" и\или "Действия после оплаты"
Указать url вебхука
Структура вебхуков
После заполнения формы мы пошлем POST запрос с json телом:
{ "action": "form.submit", "info": { "form_owner_id": "1", "form_owner_email": "owner@mail.ru", "form_page_url": "https://linkrr.ru/urpage", "form_block_id": "8199", "lead_id": "55" }, "data": { "name": "pavel", "email": "buyer@mail.ru", "phone": "+79501232323", "fields": { "Ваше имя": "pavel", "Ваш E-mail": "buyer@mail.ru", "Ваш номер телефона": "+79501232323", "Какое-то поле": "какие-то данные" } }, "sign": "34699a5637e5f4a23f6ab66687ba41d92ccaea0539b6bedfe2faed66384ad680" }
Сегмент Info - общие данные по форме, странице и лиду
Сегмент Data - данные из полей формы, которые заполнил пользователь
Подпись запроса в поле sign формируется из массива данных.
Пример на php:
$body = [ 'action' => "form.submit", 'info' => [ 'form_owner_id' => $form_owner_id, 'form_owner_email' => $form_owner_email, 'form_page_url' => $form_page_url, 'form_block_id' => $form_block_id, 'lead_id' => $lead_id ], 'data' => [ 'name' => $submitted_form_fields["name"], 'email' => $submitted_form_fields["email"], 'phone' => $submitted_form_fields["tel"], 'fields' => $webhook_fields ], ]; $body['sign'] = Hmac::create($body, $user->api_key);
После успешной оплаты мы пошлем вебхук:
{ "action": "form.pay", "info": { "form_owner_id": "1", "form_owner_email": "owner@mail.ru", "form_block_id": "8199", "lead_id": "55",
"lead_name":"\u041f\u0430\u0432\u0435\u043b",
"lead_phone":"+7950111111",
"lead_email":"lead@mail.ru" }, "data": { "payment_system": "prodamus", "amount": "500.00" }, "sign": "e9abcfdd3be30bdeedceef2a637e855d4657b03dbfb9be5cdfbbae117d547d26" }
Подпись запроса в поле sign формируется из массива данных.
Пример на php:
$body = [ 'action' => "form.pay", 'info' => [ 'form_owner_id' => $user_id, 'form_owner_email' => $form_owner_email, 'form_block_id' => $form_block_id, 'lead_id' => $lead_id, 'lead_name':$lead_name, 'lead_phone':$lead_phone, 'lead_email':$lead_email
], 'data' => [ 'payment_system' => 'prodamus', 'amount' => $params["sum"], ], ]; $body['sign'] = Hmac::create($body, $user->api_key);
Класс Hmac на php для проверки подлинности запроса:
<?php class Hmac { static function create($data, $key, $algo = 'sha256') { if (!in_array($algo, hash_algos())) return false; $data = (array) $data; array_walk_recursive($data, function(&$v){ $v = strval($v); }); self::_sort($data); if (version_compare(PHP_VERSION, '5.4.0', '<')) { $data = preg_replace_callback('/((\\\u[01-9a-fA-F]{4})+)/', function ($matches) { return json_decode('"'.$matches[1].'"'); }, json_encode($data)); } else { $data = json_encode($data, JSON_UNESCAPED_UNICODE); } return hash_hmac($algo, $data, $key); } static function verify($data, $key, $sign, $algo = 'sha256') { $_sign = self::create($data, $key, $algo); return ($_sign && (strtolower($_sign) == strtolower($sign))); } static private function _sort(&$data) { ksort($data, SORT_REGULAR); foreach ($data as &$arr) is_array($arr) && self::_sort($arr); } } ?>