Отправка сообщения






Работа с оплатой заказа в Bitrix D7

В обновлённом ядре Bitrix D7 функционал работы с заказами был существенно изменён. Немного ранее мы рассматривали работу со свойствами заказа посредством использования возможностей обновленного ядра D7. В данном посту мы поговорим про работу с функционалом оплаты заказов через API.

Об этом уже говорилось на нашем сайте, и не будет лишним повторить, что в ядре D7 реализована концепция ORM, свойственная для объектно-ориентированных языков программирования. Эта концепция включает в себя такое понятие как «коллекция», которая представляет из себя «умный» массив. Работа с ним оптимизирует групповые операции с объектами одного типа. Так к примеру, для реализации отдельного функционала сайта реализованы отведённые коллекции, с которыми мы можем работать по правилам ООП.

В данном посту вы рассмотрим возможности использования коллекции оплаты заказа Sale\PaymentCollection. Давайте создадим объект заказа, с которым мы и будем далее работать.

// используем пространство имён интернет-магазина
use Bitrix\Sale;

// int $orderId ID заказа
$order = Sale\Order::load($orderId);

// или так

// mixed $orderNumber номер заказа
$order = Sale\Order::loadByAccountNumber($orderNumber);

В переменную $order был помещён объект существующего заказа. Для работы с данными оплаты заказа, обращаемся к коллекции оплаты заказа Sale\PaymentCollection.

$paymentCollection = $order->getPaymentCollection();

После создания объекта коллекции оплаты, мы можем получать информацию об оплате текущего заказа, а также его параметры.

$paymentCollection->isPaid(); // статус оплаты заказа, true/false
$paymentCollection->hasPaidPayment(); // есть ли хотя бы одна оплата, true/false
$paymentCollection->getPaidSum(); // общая сумма оплаты
$paymentCollection->isExistsInnerPayment(); // оплачен с внутреннего счёта true/false

Возможности системы позволяют содержать множество записей об оплатах. Это означает что с этими записями мы можем работать так же и в цикле. Каждая итерация цикла будет передавать объект оплаты Sale\Payment, который даёт возможность работы с данными оплаты.

foreach ($paymentCollection as $payment) {
    $sum = $payment->getSum(); // сумма к оплате
    $isPaid = $payment->isPaid(); // статус оплаты true/false
    $isReturned = $payment->isReturn(); // возврат, true/false

    $ps = $payment->getPaySystem(); // платежная система (объект Sale\PaySystem\Service)
    $psID = $payment->getPaymentSystemId(); // ID платежной системы
    $psName = $payment->getPaymentSystemName(); // наименование платежной системы
    $isInnerPs = $payment->isInner(); // оплата с внутреннего счёта, true/false
}

Как получать данные оплаты мы рассмотрели, теперь самое время попробовать изменить параметры. Для этого мы попробует установить флаг оплаты, и возврата с помощью методов setPaid() и setReturn().

$onePayment = $paymentCollection[0];
$onePayment->setPaid("N"); // отменяем оплату
$onePayment->setPaid("Y"); // выставляем оплату
$onePayment->setReturn("Y"); // возврат средств

// сохранение изменений
$order->save();

Как мы знаем метод оплаты может иметь какую-либо форму с кнопкой оплаты. Для инициализации данной формы мы можем использовать следующий код:

$service = Sale\PaySystem\Manager::getObjectById($onePayment->getPaymentSystemId());
$context = \Bitrix\Main\Application::getInstance()->getContext();
$service->initiatePay($onePayment, $context->getRequest());

Таким образом, при создании заказа создаётся запись оплаты, с неоплаченным статусом. После транзакции покупателем статус оплаты должен меняться для подтверждения операции оплаты. Всё это делается в конкретном интерфейсе сайта. Пользуясь примерами, вы можете работать с оплатами заказа удобным для вас способом.

Опубликован: 21.04.2020 г.
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии

  • Загрузка...

Наверх