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

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

Я подтвердил, что код купона действителен, совершив транзакцию через административный сервер. Вот фрагмент кода ниже.

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

function 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");

}

Ответы на вопрос(3)

Ваш ответ на вопрос