Как настроить Bitrix для приёма уведомлений от платежной системы?

В Bitrix добавлена некая кастомная платежная система. ПС стучится в Bitrix с уведомлением о завершении платежа на общий обработчик /result_payment.php, который так или иначе вызывает обработчик ПС pay_rec.php. Далее pay_rec.php что-то делает и отвечает джейсоном. Как мне объяснили, это стандартная схема интеграции с ПС. И всё почти как надо.

Моя проблема в том что хоть система и отвечает джейсоном, этот ответ обрамляется в битриксовский HTML-шапка и -подвал. А ПС требует именно корректный JSON.

Ниже - код /result_payment.php, который редактируется через визуальный редактор в битриксе. Понятно откуда берутся шапка/подвал - через require. Но во-первых визуальный редактор, во-вторых если убрать require, то и переменная $APPLICATION не будет объявлена и до pay_rec дело не дойдёт.

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Title");
?><?$APPLICATION->IncludeComponent(
	"bitrix:sale.order.payment.receive",
	"",
	Array(
		"PAY_SYSTEM_ID" => "3",
		"PERSON_TYPE_ID" => "1"
	),
false
);?> <?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>


Вопрос: каков правильный способ ответить в нужном формате?
  • Вопрос задан
  • 2684 просмотра
Пригласить эксперта
Ответы на вопрос 2
Первый вариант. Считаю, что этот вариант самый правильный

Самое простое - заменить подключение
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

на
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");


В этом случае - ядро будет подключено (соответственно, $APPLICATION будет доступен) , но html-лэйаут не будет выводиться.

Второй вариант.
Перед вызовом компонента сделать
$APPLICATION->RestartBuffer();
Это почти как ob_start(), только через Api битрикса.

В обоих случаях подключать файл с футером не нужно.
Ну и header('Content-Type: application/json'); вставить не помешает
Ответ написан
Комментировать
nazarpc
@nazarpc
Open Source enthusiast
Вариантов два:
1) костыльный - использовать ob_start() и остальную часть семейства функций для управления выводом
2) читать и разбираться с документацией, должен быть вариант отключать генерацию макета страницы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы