bitrix sale paysystem manager

Начиная с 16 версии используется новая версия ядра магазина Битрикс, являющаяся частью ядра Битрикс D7. Многое описанное здесь может работать и в переходной версии 15.5. Все классы для работы с магазином собраны в модуле sale, поэтому для работы примером используем use для пространства модуля интернет-магазина.

Заказ (SaleOrder)

Заказ представляет собой объект класса BitrixSaleOrder. Нужно запомнить, что пока не вызван метод save() этот объект необязательно связан с сохранённым заказом. Также пока вы не вызовете save(), изменения в заказе не будут сохранены в базе данных.

Существующий заказ можно получить следующим образом:

Поля заказа можно получить короткими вызовами:

Также любое поле по имени можно получить так:

Список доступных полей можно получить, вызвав $order->getAvailableFields().

Заказ имеет связь один-ко-многим с несколькими объектами в виде коллекций — коллекция товаров в корзине (SaleBasket), коллекция отгрузок (SaleShipmentCollection), коллекция оплат (SalePaymentCollection) и коллекция свойств заказа (SalePropertyValueCollection).

Самый простой способ получить список способов доставки и оплаты — короткие вызовы:

Чтобы получить список примененных к заказу скидок, нужно вызвать:

В массиве $discountData[‘DISCOUNT_LIST’] содержится список скидок, в $discountData[‘COUPON_LIST’] содержится список купонов. Т.к. скидки можно отключать в админке, следует проверять поле APPLY: если Y — скидка/купон применёны, если N — были отключены менеджером.

Корзина заказа (SaleBasket)

Про работу с корзиной была отдельная статья, привязать и получить корзину заказа можно так:

Свойства заказа (SalePropertyValueCollection)

Свойства заказа — объекты BitrixSalePropertyValue — собраны в коллекции propertyCollection

Получить значения всех свойств и группы свойств можно так:

У многих свойств заказа есть определенное встроенное назначение (атрибуты IS_EMAIL, IS_PAYER, IS_LOCATION, IS_LOCATION4TAX, IS_PROFILE_NAME, IS_ZIP, IS_PHONE, IS_ADDRESS). Такие свойства можно получить следующими методами:

Получить значение свойства по ID:

В любом случае получаем значение свойства — экземпляр класса BitrixSalePropertyValue. Из него мы можем получить значение свойства:

И информацию о самом свойстве:

Чтобы изменить значение свойства следует вызвать метод setValue и сохранить сущность

Оплаты заказа (SalePaymentCollection)

Из коллекции оплат также можно получить информацию об оплате, что и из объекта заказа. Оплата с внутреннего счета также считается одной из оплат:

Коллекция содержит объекты оплаты SalePayment с информацией об оплатах:

Оплатить или вернуть оплату можно методами setPaid(), setReturn():

Инициировать оплату (вывести шаблон оплаты: форму, кнопку и т.п.) можно следующим образом:

Пример оформления заказа в D7

Для примера приведу простейший код оформления заказа с комментариями

Работа с платежными системами средствами классов «BitrixSalePaySystemManager», «BitrixSaleInternalsPaySystemActionTable» и других.

Выборка активных платежных систем с получением массива ограничений:

» ;
$dbRestriction = Bitrix Sale Internals ServiceRestrictionTable :: getList (array(
‘select’ => array( ‘PARAMS’ ),
‘filter’ => array(
‘SERVICE_ID’ => $paySystem [ ‘ID’ ],
//’CLASS_NAME’ => $helper->forSql(‘BitrixSaleServicesPaySystemRestrictionsPersonType’),
‘SERVICE_TYPE’ => Bitrix Sale Services PaySystem Restrictions Manager :: SERVICE_TYPE_PAYMENT
)
));
$restrictions = array();
while ( $restriction = $dbRestriction -> fetch ())
<
if( is_array ( $restriction [ ‘PARAMS’ ]))
$restrictions = array_merge ( $restrictions , $restriction [ ‘PARAMS’ ]);
>
$restriction = Bitrix Sale Services PaySystem Restrictions Delivery :: prepareParamsValues (array(), $paySystem [ ‘ID’ ]);
$restrictions [ ‘DELIVERY’ ] = $restriction [ ‘DELIVERY’ ];
echo «» ;
>

/*
Array
(
[ID] => 2
[PAY_SYSTEM_ID] => 2
[PERSON_TYPE_ID] =>
[NAME] => Ассист
[PSA_NAME] => Картой на сайте
[CODE] =>
[SORT] => 100
[ACTION_FILE] => assist
[RESULT_FILE] =>
[DESCRIPTION] =>
[NEW_WINDOW] => N
[PARAMS] => a:1:
[TARIF] =>
[PS_MODE] =>
[HAVE_PAYMENT] => Y
[HAVE_ACTION] => N
[HAVE_RESULT] => Y
[HAVE_PREPAY] => N
[HAVE_PRICE] => N
[HAVE_RESULT_RECEIVE] => Y
[ENCODING] =>
[LOGOTIP] =>
[ACTIVE] => Y
[ALLOW_EDIT_PAYMENT] => Y
[IS_CASH] => N
[AUTO_CHANGE_1C] => N
[CAN_PRINT_CHECK] => N
[ENTITY_REGISTRY_TYPE] => ORDER
)
Array
(
[CURRENCY] => Array
(
[0] => RUB
[1] => USD
[2] => EUR
)

/*
Все классы связанные с ограничениями платежных систем:
BitrixSaleServicesPaySystemRestrictionsDelivery
BitrixSaleServicesPaySystemRestrictionsCurrency
BitrixSaleServicesPaySystemRestrictionsPercentPrice
BitrixSaleServicesPaySystemRestrictionsPersonType
BitrixSaleServicesPaySystemRestrictionsPrice
BitrixSaleServicesPaySystemRestrictionsSite
BitrixSaleServicesPaySystemRestrictionsTradeBinding
*/

Выборка информации о платежной системе с >

/* Пример результата:
Array
(
[ID] => 12
[PAY_SYSTEM_ID] => 12
[PERSON_TYPE_ID] =>
[NAME] => Банковские карты
[PSA_NAME] => Оплата картой сбербанка
[CODE] => SBR
[SORT] => 1
[ACTION_FILE] => /bitrix/php_interface/include/sale_payment/sbr
[RESULT_FILE] =>
[DESCRIPTION] => Мы принимаем к оплате банковские карты:
[NEW_WINDOW] => Y
[PARAMS] => a:1:
[TARIF] =>
[PS_MODE] =>
[HAVE_PAYMENT] => Y
[HAVE_ACTION] => N
[HAVE_RESULT] => N
[HAVE_PREPAY] => N
[HAVE_PRICE] => N
[HAVE_RESULT_RECEIVE] => Y
[ENCODING] => utf-8
[LOGOTIP] => 78709
[ACTIVE] => Y
[ALLOW_EDIT_PAYMENT] => Y
[IS_CASH] => N
[AUTO_CHANGE_1C] => N
)
*/

Внимание! Оплаты всегда связаны с заказом. Использовать метод BitrixSalePayment::save() для сохранения категорически запрещается. При изменении оплаты может произойти изменение связанных сущностей, которые не будут сохранены. Необходимо выполнять сохранение через заказ: BitrixSaleOrder::save() . Помимо всего этого в одной из ближайших версий вызов BitrixSalePayment::save() будет генерировать ошибку уровня E_WARNING .

Получение оплат

  • Работа с коллекцией
  • Работа с массивом

Помимо объектов есть возможность напрямую обращаться к базе через метод BitrixSalePaymentCollection::getList($parameters) , либо BitrixSalePayment::getList($parameters) . Оба этих метода работают аналогично.

Методы всегда возвращают объект BitrixMainDBResult , из которого можно получить данные с помощью метода fetch().

Параметр Описание С версии
$parameters Массив, структура которого полностью соответствует структуре ORM’ного getList.

Получение конкретной оплаты

  • по ID:
  • по внутреннему индексу:

Добавление оплаты

  • Вариант 1:
  • Вариант 2:
  • Вариант 3:

Редактирование оплаты

Изменить данные в оплате можно через методы:

В обоих случаях результатом работы метода является объект класса BitrixSaleResult .

Список доступных для редактирования полей:

Удаление оплаты

Возвращает объект типа BitrixSaleResult .

Получение суммы оплаты

Получение текущего состояния оплаты: оплачено или нет

Возвращает true или false .

Возврат средств

Метод принимает единственный параметр, значения которого могут быть следующие:

  • ‘Y’ — при возврате на внутренний счет;
  • ‘P’ — при возврате через платежную систему(если она поддерживает данный функционал);
  • ‘N’ — при отмене возврата.

Возвращает объект типа BitrixSaleResult . При выполнении возврата Вам не требуется делать каких-то дополнительных операций вроде вызова методов API платежной системы для выполнения возврата. Система все сделает сама. При попытке выполнить возврат через платежную систему, которая его не поддерживает, будет возвращена ошибка.

Получение оплаченной суммы по заказу

Получение объекта платежной системы

Результатом работы метода является объект класса BitrixSalePaySystemService .

Получение списка доступных платежных систем с учетом настроенных ограничений

Параметры Описание С версии
$payment Объект оплаты.
$mode Одно из двух значений:
  • BitrixSaleServicesBaseRestrictionManager::MODE_CLIENT
  • BitrixSaleServicesBaseRestrictionManager::MODE_MANAGER

По умолчанию: BitrixSaleServicesBaseRestrictionManager::MODE_CLIENT . В режиме клиента возвращается список только тех платежных систем, которые попадают под ограничения.

В режиме менеджера возвращается полный список платежных систем (системы, которые не подают под ограничения, имеют ключ RESTRICTED ).

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

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

Оцените статью