private:koding:hostcms:modules:shop:cart:payment_systems:custom_bonus

Оплата бонусами только части заказа

При оплате заказа пользователь сайта может использовать бонусы с лицевого счета и оплатить таким образом до 100% заказа. Если необходимо сделать возможность оплаты бонусами только части заказа, то можно воспользовать следующим решением.

  1. Создаем константу PARTIAL_PAYMENT_PERCENT, в которую записываем возможный процент оплаты заказа бонусами с лицевого счета, например, PARTIAL_PAYMENT_PERCENT=20.
  2. Наследуем класс Shop_Payment_System_Handler и переопределяем в нем метод _applyBonuses следующим образом:
    <?php
     
    defined('HOSTCMS') || exit('HostCMS: access denied.');
     
    /**
     * Класс с переопределенным методом для оплаты бонусами.
     */
    abstract class Shop_Payment_System_Handler_CustomBonus extends Shop_Payment_System_Handler
    {
    	/**
    	 * Применяет оплату бонусами.
    	 *
    	 * @return self
    	 */
    	protected function _applyBonuses()
    	{
    		// ...
     
    		// На счете есть средства
    		if ($fSiteuserAmount)
    		{
    			// Сумма заказа в валюте магазина
    			$fOrderAmount = $this->_shopOrder->getAmount() * $fCurrencyCoefficient;
     
    			/**
    			* Бонусами можно оплатить до PARTIAL_PAYMENT_PERCENT % стоимости заказа.
    			* 
    			* Начало >>
    			*/
    			if (defined('PARTIAL_PAYMENT_PERCENT'))
    			{
    				// Доступная сумма для оплаты бонусами
    				$fAvailableOrderAmountForPayment = $fOrderAmount * floatval(PARTIAL_PAYMENT_PERCENT) / 100;
     
    				// Сумма заказа меньше или равна средствам
    				$fBonusesAmount = $fSiteuserAmount > $fAvailableOrderAmountForPayment
    					? $fAvailableOrderAmountForPayment
    					: $fSiteuserAmount;
    			}
    			else
    			{
    				// Сумма заказа меньше или равна средствам
    				$fBonusesAmount = $fSiteuserAmount > $fOrderAmount
    					? $fOrderAmount
    					: $fSiteuserAmount;
    			}
    			/**
    			* << Конец
    			*/
     
    			// ...
    		}
     
    		return $this;
    	}
    }
  3. Затем в используемых платежных системах для наследования конкретной платежной системы используем новый класс:
    <?php
     
    /**
     * Оплата наличными.
     */
    class Shop_Payment_System_HandlerXXX extends Shop_Payment_System_Handler_CustomBonus
    {
    	// ...
    }

Страницу создал Максим Засорин 11.01.18 в 09:44

private/koding/hostcms/modules/shop/cart/payment_systems/custom_bonus.txt · Last modified: 12.01.18 в 09:48 by maximzasorin_gmail.com