• Модуль: seo
  • Путь к файлу: ~/bitrix/modules/seo/lib/webhook/service.php
  • Класс: BitrixSeoWebHookService
  • Вызов: Service::listen
static function listen()
{
	$request = Context::getCurrent()->getRequest();
	$type = $request->get('code');
	if (!$type)
	{
		self::answerError(self::ANSWER_ERROR_NO_CODE);
		return;
	}

	$securityCode = $request->get('sec');
	if (!$securityCode)
	{
		self::answerError(self::ANSWER_ERROR_NO_SEC_CODE);
		return;
	}
	$externalId = $request->get('externalId');
	if (!$externalId)
	{
		self::answerError(self::ANSWER_ERROR_NO_EXT_ID);
		return;
	}

	try
	{
		$payload = Json::decode($request->get('payload'));
		$payload = (new PayloadBatch())->setArray($payload);
	}
	catch (ArgumentException $e)
	{
		self::answerError(self::ANSWER_ERROR_NO_PAYLOAD);
		return;
	}
	$instance = self::create($type, $externalId);
	if (!$instance->checkSecurityCode($securityCode))
	{
		self::answerError(self::ANSWER_ERROR_WRONG_SEC_CODE);
	}

	try
	{
		$instance->handle($payload);
	}
	catch (Exception $e)
	{
		self::answerError($e->getCode(), $e->getMessage());
		return;
	}



	foreach ($instance->getErrorCollection()->toArray() as $error)
	{
		/** @var Error $error Error. */
		self::answerError($error->getCode(), $error->getMessage());
	}

	self::answerData();
}