Скидка не применилась в корзине - разбор причин
Покупатель ждёт обещанную скидку, а корзина упрямо считает товар по полной цене. Либо наоборот: в корзине сумма падает, а на витрине цена не перечёркнута. Разбираем причины по убыванию частоты, начиная с того, где именно скидки нет.
С чего начать
Первая проверка делит все причины пополам: скидки нет на витрине или нет в корзине. Витрину считает скидка каталога, корзину - правило корзины, и это два разных механизма с разными настройками.
Смотрим итоговую цену глазами покупателя:
global $USER;$optimal = \CCatalogProduct::GetOptimalPrice($productId, 1, $USER->GetUserGroupArray(), 'N', [], SITE_ID);printf("база=%s итог=%s\n", $optimal['RESULT_PRICE']['BASE_PRICE'], $optimal['RESULT_PRICE']['DISCOUNT_PRICE']);// два одинаковых числа означают, что скидка каталога к товару не подошла// проверяем из-под покупателя: у администратора набор групп совсем другойСовпадение базовой и итоговой цены сразу закрывает половину версий: скидки каталога здесь нет.
Смотрим активные скидки каталога у товара:
$discounts = \CCatalogDiscount::GetDiscountByProduct( $productId, $USER->GetUserGroupArray(), 'N', [$basePriceTypeId], SITE_ID);print_r(array_column($discounts ?: [], 'NAME'));// пустой массив - скидок нет, false - товар заведён в каталоге некорректно// выборка зависит от групп покупателя, доступных типов цен и сайта сразуПустой список при живой акции означает несовпадение по группе, типу цены или сайту.
Сравниваем расчёт цены с купоном и без него:
// седьмой аргумент false берёт купоны из менеджера, пустой массив исключает их$withCoupon = \CCatalogProduct::GetOptimalPrice($productId, 1, $USER->GetUserGroupArray(), 'N', [], SITE_ID, false);$clean = \CCatalogProduct::GetOptimalPrice($productId, 1, $USER->GetUserGroupArray(), 'N', [], SITE_ID, []);printf("с купоном=%s без купона=%s\n", $withCoupon['RESULT_PRICE']['DISCOUNT_PRICE'], $clean['RESULT_PRICE']['DISCOUNT_PRICE']);// равные числа означают, что купон в расчёт цены не попал вовсеРавный итог при живом купоне переводит разбор к самому купону и правам покупателя.
Проверяем купон отдельно от скидки:
\Bitrix\Sale\DiscountCouponsManager::init();$added = \Bitrix\Sale\DiscountCouponsManager::add($code);printf("код принят: %s\n", $added ? 'да' : 'нет');print_r(\Bitrix\Sale\DiscountCouponsManager::get());// принят - код существует и не сгорел, применён - условия скидки совпалиПринятый купон и сработавшая скидка - разные события, и жалобы почти всегда начинаются с их смешения.
Сбрасываем кэш каталога после окончания акции:
use Bitrix\Main\Application;
// акция кончилась по дате, а страницы каталога всё ещё отдаются из кэшаApplication::getInstance()->getTaggedCache()->clearByTag('iblock_id_' . $iblockId);// тег регистрируют компоненты каталога, сброс снимает все страницы инфоблокаПо расписанию платформа страницы не пересобирает, и старая цена живёт до сброса тега.
Причины
-
Акция заведена правилом корзины, а ждут её на витрине примерно 25% случаев
ПризнакВ каталоге цена без скидки, а в корзине сумма падает на обещанный процент.
ПроверкаСмотрим, где заведена акция: в скидках каталога или в правилах работы с корзиной.
Что делатьДублируем условие скидкой каталога либо честно предупреждаем покупателя о пересчёте в корзине.
-
Купон мёртв: истёк срок, чужая группа или израсходованный тип примерно 20% случаев
ПризнакПоле ввода принимает код без ошибки, а итоговая сумма заказа остаётся прежней.
ПроверкаСмотрим активность купона, дату окончания и группы покупателей у привязанной скидки.
Что делатьВыпускаем новый код или правим группы: одноразовый купон после первого заказа мёртв.
-
Показ скидки в каталоге выключен самой платформой примерно 20% случаев
ПризнакЦена на витрине не перечёркнута, хотя в корзине скидка считается исправно.
ПроверкаСмотрим условия правила: любое условие на состав корзины гасит показ в каталоге.
Что делатьПереносим условие на свойства товара, иначе признак показа платформа включить не даст.
-
Скидка назначена родителю, а не торговому предложению примерно 15% случаев
ПризнакУ товара с вариантами скидки нет, а у обычных товаров та же акция работает.
ПроверкаЗапрашиваем активные скидки по идентификатору предложения, а не по карточке родителя.
Что делатьПереносим условие скидки на предложения или на раздел каталога вместо конкретной карточки.
-
Пересчёт заказа в админке даёт другую сумму примерно 12% случаев
ПризнакНа оформлении скидка была, а в карточке заказа она пропала или изменила величину.
ПроверкаСравниваем сохранённый в заказе список скидок с результатом пересчёта на текущем составе.
Что делатьПересчитываем осознанно: кнопка берёт действующие правила, а не те, что были при покупке.
-
Кэш витрины отдаёт цену закончившейся акции примерно 8% случаев
ПризнакКаталог показывает старую цену со скидкой, а в корзину товар падает по новой.
ПроверкаСверяем дату окончания скидки со временем последнего сброса кэша страниц каталога.
Что делатьСбрасываем тегированный кэш инфоблока: по расписанию платформа страницы сама не пересобирает.
Частые вопросы
Почему скидка есть в каталоге, а в корзине её нет?
Проверяют два места сразу: где заведена акция и каким группам покупателей она разрешена. Скидка каталога и правило корзины считаются разными модулями, и настройки доступа у них свои.
Купон принят, а скидка не применилась - почему?
Принятый код означает лишь, что он существует и не сгорел. Сработала ли скидка, показывает список применённых правил корзины, и разбор ведут по нему.
Почему у правила не включается показ в каталоге товаров?
Признак считается платформой автоматически. Условие по составу корзины делает показ невозможным: этих данных на витрине просто нет, и переключить признак руками нельзя.
Скидка перестала применяться после обновления, куда смотреть?
Сначала в версию модуля продаж и в журнал обновлений. Дальше сверяют сохранённый в заказе список скидок с пересчётом: расхождение показывает, что правило изменилось после оформления.
Почему скидка не применяется к товарам из нового инфоблока?
Скидка привязана к сайту и к условиям по каталогу. Новый инфоблок должен принадлежать тому же сайту и попадать под условия, иначе правило его не видит.
Смежное
- Цены, скидки и купоны - оглавление подтемы
- Правила работы с корзиной: условия, порядок, отладка - устройство самих правил, а не разбор жалобы
- Цена на витрине не та: разбор причин - когда цена неверна и без всяких скидок
- Купоны: типы, выпуск пачкой, применение и проверка - срок, тип кода и связь со скидкой
- Путь цены: от типа цены до суммы в корзине - весь расчёт целиком, от типа цены до итога
- Скидка на отдельную позицию в корзине - как скидка ставится на одну строку
- Сумма заказа не сходится с корзиной: разбор причин - та же жалоба на шаге оформления
- Цена не меняется при выборе варианта: разбор причин - товары с торговыми предложениями
- Каталог и продажи - устройство магазина целиком