2013-08-16 3 views
10

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

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

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

+0

Вы нашли решение для этого? – Taras

+0

Могу ли я увидеть ваше состояние правил корзины покупок для этого? –

+0

Для того, чтобы скопировать код ошибки, необходимо скопировать код правила, если вам нужна помощь в диагностике того, почему код купона некорректен. –

ответ

0

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

Затем

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

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

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

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

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

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

У вас нет прямого доступа к нему, потому что $ _data защищен.

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

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

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

Другой способ попробовать добавить купон с использованием сеттер в

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

или

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

и проверьте, работает ли это или нет. Если это не то смотреть в

_validateCouponCode in Mage_Sales_Model_Quote 

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

7

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

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

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

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

Т.Л., д-р

Шаг отладки Mage_SalesRule_Model_Validator :: процесс() и Mage_SalesRule_Model_Validator :: processShippingAmount() отлаживать почему ваш код купона не действителен.

Смежные вопросы