Почему $address-> hasCouponCode() всегда возвращает null?

как в заголовке... по какой-то причине, веб-сайт magento не применяет коды купонов... всегда возвращает недопустимое сообщение "Код купона недействителен". Но, как ни странно, это происходит, когда цена корзины больше, чем 120 моя валюта.

Пример: если у меня есть один товар в корзине с ценой 65, код купона работает нормально... если у меня есть тот же товар в корзине, но с qty 2 (что означает, что общая цена становится 130), я получаю вышеупомянутое неверное сообщение об ошибке

Я проследил код до класса Mage_Sales_Model_Quote, который имеет функцию с именем: _validateCouponCode(), внутри которого следующее: $address- > hasCouponCode() всегда возвращает false... Что я должен попробовать?... Я переиндексировал, обновил кеш... и... ничего не изменилось... и я не могу найти в модели адресов функцию hasCouponCode, чтобы увидеть, что происходит там... большое спасибо заранее

Ответ 1

Ну, без ваших точных правил трудно дать полный ответ.

Во-первых, вызов Mage_Sales_Model_Quote:: _ validateCouponCode() имеет единственное задание удаления кода купона из котировки, если код купона не указан на котировке. Это связано с тем, что во время вызова collectTotal общая модель скидки копирует код купона на адрес, если он действителен и применяется. Таким образом, тот факт, что $address- > hasCouponCode() возвращает нуль, в этом случае является всего лишь индикатором того, что валидатор правил отказался применить поставляемый код купона.

Во-вторых, есть два метода, которые вы должны проследить, чтобы узнать, почему ваш купон не применяется. Вероятно, это будет только один или другой в зависимости от вашего купона, но я укажу на оба. Mage_SalesRule_Model_Validator:: process() и Mage_SalesRule_Model_Validator:: processShippingAmount() - это два места, которые будут проверять ваш код купона и, возможно, применить его и скопировать код по адресу.

В качестве побочного примечания, Mage_SalesRule_Model_Validator:: _ maintainAddressCouponCode() - это метод, ответственный за копирование купонного кода из валидатора (который получил код из цитаты) по адресу. Если этот метод никогда не вызывается, ваш код купона всегда будет удален из цитаты.

ТЛ; дг

Шаг debug Mage_SalesRule_Model_Validator:: process() и Mage_SalesRule_Model_Validator:: processShippingAmount(), чтобы отладить, почему ваш код купона недействителен.

Ответ 2

Сначала вам нужно понять, как работает $address- > hasCouponCode().

Нет такого метода, который вызывается с помощью магической функции __call.

Вы не можете напрямую обращаться к нему, потому что $_data защищен.

Теперь лучший способ отладки - проверить, есть ли у вас купон в вашем адресном объекте.

$data = $address->getData();
$coupon = $data['coupon_code'];

Теперь проверьте, установлен ли купон или нет, если у вас есть 2 элемента в корзине.

Другой способ - попробовать добавить купон с помощью setter как

$address->setCouponCode('Your Coupon Code');

или

$address->setData('coupon_code', 'Your Coupon Code');

и проверьте, работает это или нет. Если это не произойдет, загляните в

_validateCouponCode in Mage_Sales_Model_Quote

Будет хорошим началом для отладки.

Ответ 3

Прежде всего, var_dump ($ address) и проверьте детали.

Затем

Проверьте следующее:

  • Правильные даты начала и окончания.
  • Настройка правильных групп клиентов для купона.
  • Установка active.

Если все выше 1, 2, 3 требования истинны, тогда установите Stop further rules processing в YES

  • Кроме того, по какой-то причине для SKU требуются буквенно-цифровые цифры для условий. Поэтому проверьте, являются ли ваши значения SKU продуктов алфавитно-цифровыми.