С чего начинается платёжный обработчик Sale D7
В новой модели платёжная интеграция оформляется как отдельный каталог под /bitrix/php_interface/include/sale_payment/ или /local/php_interface/include/sale_payment/. Внутри лежит handler.php с описанием сервиса, .description.php с параметрами из административной части и подшаблоны в каталоге template. Для живого образца стоит заглянуть в поставочные решения каталога /bitrix/modules/sale/handlers/paysystem/.
Согласованность имени класса и каталога
Класс должен наследовать Bitrix\Sale\PaySystem\ServiceHandler, а фрагмент имени до суффикса Handler должен совпадать с именем папки. Иначе ядро поднимет сценарий совместимости и не распознает обработчик как полноценный D7. Если обработчик лежит в local, проверьте опцию path2user_ps_files — путь должен указывать на тот же префикс.
Ключевые точки жизненного цикла
initiatePay формирует дополнительные параметры и отдаёт шаблон оплаты. getPaymentIdFromRequest извлекает идентификатор оплаты из обратного запроса банка. Для валют реализуйте getCurrencyList. Обратные уведомления обрабатываются через /bitrix/tools/sale_ps_result.php: пара getIndicativeFields и isMyResponseExtended отфильтровывает «свой» ответ, после чего вызывается processRequest, где вы выставляете статусы и суммы согласно протоколу ПС.
namespace Sale\Handlers\PaySystem;
use Bitrix\Sale\PaySystem;
class DemoGatewayHandler extends PaySystem\ServiceHandler
{
// Реализация initiatePay, getPaymentIdFromRequest, processRequest и т.д.
}
Диагностика
Ошибки фиксируются через PaySystem\ErrorLog::add. Их можно прочитать из таблицы b_sale_pay_system_err_log (в т.ч. через perfmon в админке) или небольшим PHP-скриптом с PaySystemErrLogTable::getList.
\Bitrix\Main\Loader::includeModule('sale');
$it = \Bitrix\Sale\Internals\PaySystemErrLogTable::getList(['order' => ['ID' => 'DESC']]);
while ($row = $it->fetch()) {
print_r($row);
} Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии