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