270  /  330

Кастомизация платежных систем и служб доставок

Просмотров: 2865 (Статистика ведётся с 06.02.2017)

Средства системы позволяют кастомизировать и добавлять свои собственные службы доставки, свои собственные платежные системы, причем в магазине на ядре D7 они представляют из себя классы. Следовательно, можно использовать механизм наследования:

  • если необходимо сделать платежную систему или службу доставки, похожую на входящую в состав продукта, то можно унаследоваться от соответствующего класса;
  • если требуется написать платежную систему или службу доставки с нуля, то можно унаследоваться от базового класса.

Пример наследования для платежных систем:

class YandexHandler extends ServiceHandler implements IReturn, IHold
{
    public static function initiatePay(Payment $payment)
    {
        $params = array('URL' = > $this->getUrl($payment, 'pay'));
        $this->setExtraParams($params);
        
        return $this->showTemplate($payment, "template");
    }

    public static function getIndicativeFields()
    {
        return array('BX_HANDLER' => 'YANDEX');
    }
}

Пример наследования для служб доставок:

class SimpleHandler extends \Bitrix\Sale\Delivery\Services\Base
{
    protected static $isCalculatePriceImmediately = true;
	protected static $whetherAdminExtraServiceShow = true;
	
	/**
	* @param array $initParams
	* @throws \Bitrix\Main\ArgumentTypeException
	*/
    
    public function __construct(array $initParams)
    {
        parent::__construct($initParams);
    }
}

Система будет искать обработчик в следующих директориях:

  • для платежных систем:
    protected static $handlerDirectories = array(
    	'LOCAL' = > '/local/php_interface/include/sale_payment',
    	'CUSTOM' = > '/bitrix/php_interface/include/sale_payment',
    	'SYSTEM' = > '/bitrix/modules/sale/handlers/paysystem'
    )
    
  • для служб доставок:
    self::$handlersDirectories = array(
    	'LOCAL' = > '/local/php_interface/include/sale_delivery',
    	'CUSTOM' = > '/bitrix/php_interface/include/sale_delivery',
    	'SYSTEM' = > '/bitrix/modules/sale/handlers/delivery'
    )
    

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

EventManager::getInstance()->addEventHandler(
    'sale',
    'onSaleDeliveryServiceCalculate',
    'myCalc'
);

Например, вы можете увеличить стоимость доставки на 100 единиц:

function myCalc(Event $event)
{
	/** @var Delivery\CalculationResult $baseResult */
	$baseResult = $event->getParameter('RESULT');
	$shipment = $event->getParameter('SHIPMENT');
	
	$price = $baseResult->getDeliveryPrice() + 100;
	$baseResult->setDeliveryPrice($price);
	
	$event->addResult(
		new EventResult(
			EventResult::SUCCESS, array('RESULT' => $baseResult)
		)
	);
}



8
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии