- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/ads/form/webhookformfillhandler.php
- Класс: Bitrix\Crm\Ads\Form\WebHookFormFillHandler
- Вызов: WebHookFormFillHandler::processItem
private function processItem(string $serviceType, Payload\LeadItem $externalFormFillItem, string $originId): void
{
$linkDb =
AdsFormLinkTable::query()
->setSelect(['WEBFORM_ID'])
->where('ADS_FORM_ID', $adsFormId = $externalFormFillItem->getFormId())
->where('ADS_TYPE', $serviceType)
->addOrder('DATE_INSERT', 'DESC')
->exec();
if ($linkDb->getSelectedRowsCount() <= 0)
{
$this->addError("Linked crm-forms by ads-form-id `{$adsFormId}` not found.");
return;
}
/**@var \Bitrix\Seo\LeadAds\Form */
$form = $this->service->getForm($serviceType);
$adsResult = $form->getResult($externalFormFillItem);
if (!$adsResult || !$adsResult->isSuccess())
{
$this->errorCollection->add($adsResult->getErrors());
return;
}
for ($incomeFields = []; $item = $adsResult->fetch();)
{
$incomeFields[$item['NAME']] = $item['VALUES'];
}
for (; $link = $linkDb->fetch();)
{
// check existing form
if (($form = new Form()) && !$form->load($link['WEBFORM_ID']))
{
$this->addError("Can not load crm-form by id `{$link['WEBFORM_ID']}`.");
continue;
}
// check existing result
if ($form->hasResult($originId))
{
continue;
}
// chek if map exists
if (!$mapper = $form->getIntegration()->getIntegrationFieldsMapper($serviceType, $adsFormId))
{
$this->addError("Mapper not exists for this form");
continue;
}
// add result
$result = $form->addResult(
$mapper->prepareFormFillResult($incomeFields),
[
'ORIGIN_ID' => $originId,
'COMMON_DATA' => [
'TRACE_ID' => Trace::create()
->addChannel($serviceType === Service::TYPE_FACEBOOK ? new FbLeadAds() : new VkLeadAds())
->addChannel(new Channel\Form($link['WEBFORM_ID']))
->save(),
],
]
);
foreach ($result->getErrors() as $errorMessage)
{
$this->addError($errorMessage);
}
}
}