При оплате заказа пользователь сайта может использовать бонусы с лицевого счета и оплатить таким образом до 100% заказа. Если необходимо сделать возможность оплаты бонусами только части заказа, то можно воспользовать следующим решением.
PARTIAL_PAYMENT_PERCENT
, в которую записываем возможный процент оплаты заказа бонусами с лицевого счета, например, PARTIAL_PAYMENT_PERCENT=20
.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; } }
<?php /** * Оплата наличными. */ class Shop_Payment_System_HandlerXXX extends Shop_Payment_System_Handler_CustomBonus { // ... }
Страницу создал Максим Засорин 11.01.18 в 09:44