Подготовка платёжной системы
Подготовка платёжной системы
Интерфейс \Bitrix\Sale\PaySystem\Cashbox\ISupportPrintCheck
Необходимо указать, что Ваша платёжная система поддерживает печать чеков.
Для этого нужно реализовать интерфейс ISupportPrintCheck, который имеет 1 метод getCashboxClass:
public static function getCashboxClass(): string;
Метод должен вернуть строку с названием класса кассы, через которую будет выполняться печать чеков.
Пример:
class RoboxchangeHandler extends PaySystem\ServiceHandler implements PaySystem\Cashbox\ISupportPrintCheck { //... public static function getCashboxClass(): string { return '\\'.Cashbox\CashboxRobokassa::class; } }
Трейт \Bitrix\Sale\PaySystem\Cashbox\CheckTrait
Для удобства работы с товарами, которые должны быть переданы в запросе при создании платежа во внешней системе, существует трейт CheckTrait.
Трейт имеет метод buildCheckQuery:
private function buildCheckQuery(Sale\Payment $payment): Sale\PaySystem\ServiceResult
Использование данного метода делегирует сборку товаров кассе. Это гарантирует, что переданные в платёжную систему товары и товары, по которым будет напечатан закрывающий чек, будут одними и теми же.
Пример
class RoboxchangeHandler extends PaySystem\ServiceHandler implements PaySystem\Cashbox\ISupportPrintCheck { // Используем трейт use PaySystem\Cashbox\CheckTrait; public function initiatePay(Payment $payment, Request $request = null) { $receipt = null; // Проверяем можно/нужно ли получать данные для чека if ($this->service->canPrintCheckSelf($payment)) { $receiptResult = $this->getReceipt($payment); if (!$receiptResult->isSuccess()) { $result = new PaySystem\ServiceResult(); $result->addErrors($receiptResult->getErrors()); return $result; } $receipt = self::encode($receiptResult->getData()); PaySystem\Logger::addDebugInfo(__CLASS__.": receipt = {$receipt}"); } // $receipt будет содержать данные для чека, которые нужно отправить в платёжный шлюз } private function getReceipt(Payment $payment): PaySystem\ServiceResult { $result = new PaySystem\ServiceResult(); // Используем метод buildCheckQuery из трейта $checkQueryResult = $this->buildCheckQuery($payment); if ($checkQueryResult->isSuccess()) { // $receiptData будет содержать данные по чеку, которые были получены от кассы $receiptData = $checkQueryResult->getData(); if (!empty($receiptData['items']) && !empty($receiptData['sno'])) { $result->setData ( [ 'sno' => $receiptData['sno'], 'items' => $receiptData['items'], ] ); } else { $result->addError(PaySystem\Error::create('Ошибка при формировании чека')); } } else { $result->addErrors($checkQueryResult->getErrors()); } return $result; } //... // Возвращаем название кассы public static function getCashboxClass(): string { return '\\'.Cashbox\CashboxRobokassa::class; } }
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.