Intereting Posts
Мой код mod_rewrite в htaccess заставил страницу не загружать Отменить все переменные в скрипте PHP XPATH не работает над HTML HTML – изменение цвета в текстовой области из опции внутри поля выбора, сгенерированного из mysql Symfony2, Как добавить поле типа скрытой даты в форму? Symfony 1.4 совместимая система перевода I18N? «Неопределенная константа / переменная» Ошибка в Laravel … Невозможно показать переменную в лезвии Regex PHP – заменить цвета в имени – но только если они в цвете, а не в названиях компаний переписать URL-адрес при отправке формы Получить почтовый индекс пользователя facebook графическим API facebook PHP-выборка из базы данных и сохранение в выпадающем меню html PHP createFromFormat для версии 5.2 Larvel Cartalyst Sentinel – Добавление столбца имени пользователя в таблицу пользователей (что является правильным способом) API Facebook без аутентификации клиента для общего контента Не удалось найти шаблон Twig с помощью метода render в Symfony 2

Magento: setCouponCode, похоже, не применяет купон по модели цитаты

мы используем Magento в основном для транзакций и полностью переписываем интерфейс с помощью специального приложения. У меня возникли проблемы с применением кода купона (правила цены корзины покупок) на объект цитаты. Код купона, кажется, отклонен – ​​setCouponCode не возвращает никакой ошибки, но getCouponCode возвращает пустую строку.

Я подтвердил, что код купона действителен, проводя транзакцию через бэкэнд администратора. Ниже приведен фрагмент кода.

Может ли кто-нибудь помочь мне получить объект модели цитаты, чтобы принять и применить код купона?

функция add_coupon ($ shoppingCartId, $ couponcode) {

try { $quoteObj = Mage::getModel('sales/quote')->load($shoppingCartId); $quoteObj->getShippingAddress()->setCollectShippingRates(true); $quoteObj->getShippingAddress()->setCouponCode($coupon) ->setTotalsCollectedFlag(true) ->collectTotals() ->save(); } catch (Exception $e) { return array("status"=>"failed", "message"=>"Error applying coupon."); } if ($coupon) { if (!$coupon == $quoteObj->getCouponCode()) { return array("status"=>"failed", "message"=>"Coupon code is not valid."); } } return array("status"=>"success"); 

}

Я столкнулся с той же проблемой и обнаружил, что мне нужно вызвать setCouponCode (), прежде чем добавлять какие-либо элементы в мою цитату.

В вашем случае это будет выглядеть так:

 $quoteObj = Mage::getModel('sales/quote')->setCouponCode($coupon)->load($shoppingCartId); 

Вся логика, необходимая для работы с купонами, находится в модуле SalesRule.

Существует модель Mage_SalesRule_Model_Coupon которая является объектом купона, и имеет модель ресурса Mage_SalesRule_Model_Mysql4_Coupon .

Чтобы создать новый купон, вы можете создать экземпляр вышеуказанной модели купона, заполнить все поля и вызвать метод save (). Он будет записывать данные в таблицу salesrule_coupon . Но если вы посмотрите на эту таблицу, вы увидите, что купоны зависят от идентификатора правила, поэтому сначала вам нужно создать правило продаж .

Mage_SalesRule_Model_Rule заботится о правилах, у него также есть собственная модель ресурсов. Я думаю, вам будет полезно исследовать, как они работают

Сегодня вечером я потерял несколько часов. Надеюсь, я смогу спасти кого-то. Эмили правильно подходит для этого примера (где вы загружаете корзину покупок в цитату).

Это относится к Magento 1.7.0.2, я не уверен, что он держится для других версий.

Если вы программно создаете заказ, но не используете корзину для покупок, это может вам помочь: Основная проблема заключается в том, что Magento запускает collectTotals () каждый раз, когда вы добавляете / обновляете адрес в цитате, – и вот важный part: он кэширует их. (Фактически, после сохранения адреса, если вы проверите getTotalsCollectedFlag, вы увидите, что оно установлено в true!). Установка кода купона после этого, даже если вы запустите collectTotals (), не применяет код купона.

Вы можете вызвать setTotalsCollectedFlag (false) в цитате, а затем применить купон, но это плохая идея (это может привести к некоторым просчетам в соответствии с сообщением об ошибке Magento, которое больше не доступно), то, что вы хотите сделать, это вызов setCouponCode перед установкой любых адресов (или, по крайней мере, перед установкой последнего адреса).