@inviziblll

Как в 1C-Битрикс сделать свой обработчик для платежной системы на основе существующего?

Дорабатываю сайт интернет-магазина, на CMS 1C-Битрикс, редакция Малый Бизнес. На основе платежной системы "Квитанция Сбербанка" я хочу свой обработчик платежной системы, в документации Битрикс не понятно как правильно разместить кастомный обработчик платежной системы.

ссылка на документацию

ссылка на дополнительную статью

Согласно инструкции разместил в папке local/php_interface/include/sale_payment/ свою платежную систему.
Сейчас я сделал следующее:
  • я скопировал содержимое папки bitrix/modules/sale/ru/payment/sberbank (здесь находится платежная система Квитанция Сбербанка) в директорию local/php_interface/include/sale_payment/test
  • изменил немного файл .description.php

Моя кастомная платежная система появилась в списке.

Но не понятно где нужно разместить файл handler.php - файл в котором будет мой кастомный класс обработчик для платежной системы, который я унаследую от PaySystem\BaseServiceHandler?

Подскажите как в директории local/php_interface/include/sale_payment/ разместить файл handler.php

Сейчас после совершения заказа при выборе кастомной платежной системы у меня отображается ошибка:

[Bitrix\Main\SystemException]
Ключ "SELLER_PARAMS" не найден в массиве GLOBALS[SALE_CORRESPONDENCE] и значение по умолчанию не определено. Идентификатор заказа: "144", идентификатор платежной системы: "16" (CAllSalePaySystemAction::GetParamValue) (1)
C:\OpenServer\domains\ovsinka\bitrix\modules\sale\general\pay_system_action.php:127
#0: CAllSalePaySystemAction::GetParamValue(string)
C:\OpenServer\domains\ovsinka\local\php_interface\include\sale_payment\test\payment.php:19
#1: require(string)
C:\OpenServer\domains\ovsinka\bitrix\modules\sale\lib\paysystem\compatibilityhandler.php:209
#2: Bitrix\Sale\PaySystem\CompatibilityHandler->includeFile(string)
C:\OpenServer\domains\ovsinka\bitrix\modules\sale\lib\paysystem\compatibilityhandler.php:65
#3: Bitrix\Sale\PaySystem\CompatibilityHandler->initiatePay(object, NULL)
C:\OpenServer\domains\ovsinka\bitrix\modules\sale\lib\paysystem\service.php:75
#4: Bitrix\Sale\PaySystem\Service->initiatePay(object, NULL, integer)
C:\OpenServer\domains\ovsinka\local\components\alex\sale.order.ajax\class.php:6129
#5: SaleOrderAjax->showOrderAction()
C:\OpenServer\domains\ovsinka\local\components\alex\sale.order.ajax\class.php:6019
#6: SaleOrderAjax->doAction(string)
C:\OpenServer\domains\ovsinka\local\components\alex\sale.order.ajax\class.php:6282
#7: SaleOrderAjax->executeComponent()
C:\OpenServer\domains\ovsinka\bitrix\modules\main\classes\general\component.php:649
#8: CBitrixComponent->includeComponent(string, array, NULL)
C:\OpenServer\domains\ovsinka\bitrix\modules\main\classes\general\main.php:1039
#9: CAllMain->IncludeComponent(string, string, array)
C:\OpenServer\domains\ovsinka\personal\order\make\index.php:125

Как я предполагаю это из-за того что нет обработчика.
  • Вопрос задан
  • 2618 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Alex_Nzr
handler.php должен быть в той же папке.

Насколько я понял, файл payment.php вообще не является обязательным, так как его роль сводится к предварительной проверке данных и запуске метода initiatePay из handler.php
Если в кастомном обработчике нет файла payment.php, то initiatePay вызывается сразу, без всяких ошибок. Валидацию входных данных можно сделать там же.

То есть можно скопировать любой обработчик из "/bitrix/modules/sale/handlers/paysystem/", перенести в "/local/php_interface/include/sale_payment/" и кастомизировать (в этом случае он заменит системный). Либо можно использовать его, как образец и на его основе создать свой.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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