Подготовка платёжной системы
Подготовка платёжной системы
Интерфейс \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