Документация для разработчиков
Темная тема

Подготовка платёжной системы

Подготовка платёжной системы

Интерфейс \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-2021, «1С-Битрикс», 2021
Наверх