2012-09-09 2 views
0

나는 잠시 동안이 문제에 시달리고 있지만, 꽤 솔직해야하지만 ... magento cart.coupon.add api를 사용하여 주문하려면 쿠폰을 적용하려고합니다. 제품은 가상 여기 내 코드 (그리고 나는 내가 여기 오기 전에 내가 구글에서 찾을 수있는 모든 시도했습니다) :Magento 코어 할인

protected function _applyCoupon($quoteId, $couponCode, $store = null) 
{ 
    $coupon = Mage::getModel('salesrule/coupon'); 
    $coupon->loadByCode($couponCode); 
    Mage::log('_applyCoupon('.$couponCode.')'); 
    $quote = $this->_getQuote($quoteId, $store); 

    if (!$quote->getItemsCount()) { 
    //  $this->_fault('quote_is_empty'); 
    } 

    $oldCouponCode = $quote->getCouponCode(); 
    if (!strlen($couponCode) && !strlen($oldCouponCode)) { 
     return false; 
    } 
    try { 
     //$quote->getShippingAddress()->setCollectShippingRates(true); 
     $quote->setCouponCode($couponCode); 
     $quote->setTotalsCollectedFlag(false)->collectTotals(); 
     $quote->collectTotals(); 
     $quote->save(); 
     Mage::getModel("checkout/session")->setData("coupon_code",$couponCode); 
     Mage::getModel('checkout/cart')->getQuote()->setCouponCode($couponCode)->save(); 
     Mage::getModel('checkout/cart')->getQuote()->collectTotals(); 
     Mage::getModel('checkout/cart')->getQuote()->save(); 
     Mage::log("_applyCoupon : Set coupon to quote:".$quote->getCouponCode()); 

    } catch (Exception $e) { 
     $this->_fault("cannot_apply_coupon_code", $e->getMessage()); 
    } 
     Mage::log('3'); 

    if ($couponCode) { 
     Mage::log("Coupon applied"); 
     if (!$couponCode == $quote->getCouponCode()) { 
      Mage::log('3.2'); 
      $this->_fault('coupon_code_is_not_valid'); 
     } 
    } 

    return true; 
} 

나는 또한 해결하기 위해 쿠폰을 적용 시도했다 :

protected function applyDiscountToAddress($address,$quote) 
{ 
    Mage::log('applyDiscountToProduct ...'); 
    $coupon = Mage::getModel('salesrule/coupon'); 
    Mage::log("checkoutprocess: checkout/session:".Mage::getModel("checkout/session")->getData("coupon_code")); 
    $coupon->loadByCode(Mage::getModel("checkout/session")->getData("coupon_code")); 
    $rule = Mage::getModel('salesrule/rule'); 
    $rule->load($coupon->getRuleId()); 
    $discountamount = $rule->getDiscountAmount(); 
    $dbldiscount = 0.00 + $discountamount; 
    $grandTotal = Mage::getModel('checkout/cart')->getQuote()->getGrandTotal(); 
    $subTotal = Mage::getModel('checkout/cart')->getQuote()->getSubtotal(); 
    Mage::log('applyDiscountToProduct $grandTotal:'.$grandTotal); 
    Mage::log('applyDiscountToProduct $subTotal:'.$subTotal); 

    $gTotal = $grandTotal - $dbldiscount; 
    $address->setDiscountAmount($dbldiscount) 
     ->setBaseDiscountAmount($dbldiscount) 
     ->setGrandTotal($gTotal) 
     ->setBaseGrandTotal($gTotal); 

    $grandTotal  = $address->getGrandTotal(); 
    $baseGrandTotal = $address->getBaseGrandTotal(); 
    Mage::log('applyDiscountToProduct Address:$grandTotal:'.$grandTotal); 
    Mage::log('applyDiscountToProduct Address:$baseGrandTotal:'.$baseGrandTotal); 

    $totals  = array_sum($address->getAllTotalAmounts()); 
    $baseTotals = array_sum($address->getAllBaseTotalAmounts()); 

    $address->setGrandTotal($grandTotal+$totals); 
    $address->setBaseGrandTotal($baseGrandTotal+$baseTotals); 
} 

쿠폰은 유효하지만 Magento 관리자에게 주문한 후 할인 금액 = 0.0이며 사용자가 신용 카드로 전액을 청구했음을 알 수 있습니다. 누구든지 ....? 도움...?

답변

0

마지막으로 내가 인용에 어떤 항목을 추가하기 전에 setCouponCode()를 호출하는 데 필요한 답변

을 발견했다.

$quote= Mage::getModel('sales/quote')->setCouponCode($couponCode); 
+0

이 답변을 조금 더 자세히 설명해 주시겠습니까? Magento 1.9에서 가상 제품에 할인 코드를 적용하는 것과 비슷한 문제가 있습니다. 감사! – Dan

+0

결제를 수행 할 때 이미 생성 된 견적을로드 할 때 또는 장바구니/견적이 맨 처음 생성 된 경우 사용자가 쿠폰을 추가하지 않고 장바구니에 항목을 추가 할 때 이렇게해야합니다. –