В новой записи собран код для работы с купонами, скидками для интернет-магазина на CMS Bitrix. Мы с вами рассмотрим: как активировать купоны, как деактивировать купоны, как проверять существование купона и как получать доступные купоны для пользователя.
Для начала вам нужно создать несколько купонов в админке сайта. Для этого переходим во вкладку Маркетинг -> Товарный маркетинг -> Правила работы с корзиной здесь указываем условие при котором купон будет доступен и прописываем действие которое выполняется после активации купона.
Для работы методов пропишите в шапке странице подключение области видимости для методов.
use Bitrix\Main,
Bitrix\Sale;
Получить список всех активных купоном
$listCoupon = Sale\DiscountCouponsManager::get(true);
echo '<pre>';
var_dump($listCoupon);
echo '</pre>';
Активация купона для текущей корзины
Данный запрос используется для привязки купона к текущей корзине, поэтому его нужно выполнять по выполнению события. Не нужно его выполнять после каждой загрузке страницы.
// код купона
$coupon = 'BEST-PROG-TIME';
// применяем купон
Sale\DiscountCouponsManager::add($coupon);
// получаем объект корзины для текущего пользователя
$oBasket = Sale\Basket::loadItemsForFUser(
Sale\Fuser::getId(),
\Bitrix\Main\Context::getCurrent()->getSite()
);
// получаем объект скидок для корзины
$oDiscounts = Sale\Discount::loadByBasket($oBasket);
// обновляем поля в корзине
$oBasket->refreshData(['PRICE','COUPONS']);
// пересчёт скидок для корзины
$oDiscounts->calculate();
// получаем результаты расчёта скидок для корзины
$result = $oDiscounts->getApplyResult();
Деактивация купона
Деактивируется купон также 1 запросом и не требует повторного выполнения.
// код купона
$coupon = 'BEST-PROG-TIME';
// отменяем работу купона
Sale\DiscountCouponsManager::delete($coupon);
// получаем объект корзины для текущего пользователя
$oBasket = Sale\Basket::loadItemsForFUser(
Sale\Fuser::getId(),
\Bitrix\Main\Context::getCurrent()->getSite()
);
// получаем объект скидок для корзины
$oDiscounts = Sale\Discount::loadByBasket($oBasket);
// обновляем поля в корзине
$oBasket->refreshData(['PRICE','COUPONS']);
// пересчёт скидок для корзины
$oDiscounts->calculate();
// получаем результаты расчёта скидок для корзины
$result = $oDiscounts->getApplyResult();
Деактивация всех активных купонов
/* Если true, то введенные купоны будут убраны из сессии. */
Sale\DiscountCouponsManager::clear(true);
Проверка активности купона
// код купона
$coupon = 'BEST-PROG-TIME';
// проверяем есть ли применённые купоны
Sale\DiscountCouponsManager::isEntered();
Простая проверка существования купона в системе
if (Sale\DiscountCouponsManager::isExist($coupon)) {
// купон существует
}