2014-10-02 90 views
0

我对发生了什么事情很有头脑。我不知道如何解决这个问题。由于我要求paypal包含订单项,因此它会计算总订单项,但它们与总计项不匹配。PayPal网关已拒绝请求。购物车项目金额的总计与订单金额不匹配。 Magento

config.xml中

<sales> 
     <quote> 
      <totals> 
       <biddiscount> 
        <class>winints/biddiscount</class> 
        <before>subtotal</before> 
       </biddiscount> 
       <globaldiscount> 
        <class>winints/globaldiscount</class> 
        <before>subtotal</before> 
       </globaldiscount> 
      </totals> 
     </quote> 
    </sales> 

GlobalDiscount类

<?php 
/** 
* Created by PhpStorm. 
* User: numerical25 
* Date: 5/17/14 
* Time: 7:49 PM 
*/ 

class Superior_WinInts_Model_Globaldiscount extends Mage_Sales_Model_Quote_Address_Total_Subtotal { 

    protected $amount = 0; 
    protected $set = 0; 

    public function collect(Mage_Sales_Model_Quote_Address $address) { 
     if ($address->getData('address_type') == 'billing') 
      return $this; 
     $discount = Mage::app()->getRequest()->getParam('global_discount_amount'); 
     $grandTotal = $address->getGrandTotal(); 
     $baseGrandTotal = $address->getBaseGrandTotal(); 
     if(Mage::getSingleton('customer/session')->isLoggedIn() && $discount) { 

      $customer = Mage::getModel('customer/customer')->load(Mage::getSingleton('customer/session')->getId()); 
      $credit = Mage::getModel("winints/wallet") 
       ->getCustomerStoreCreditTotal($customer->getId()); 
      if($credit >= $discount) { 
       $this->amount = $discount; 
      } 
      Mage::getSingleton('core/session')->setGlobalDiscount($discount); 

      $totals = array_sum($address->getAllTotalAmounts()); 
      $baseTotals = array_sum($address->getAllBaseTotalAmounts()); 
      //You have to set Grand and Base Grand Total for this crap to work 
      $address->setDiscountAmount(-$discount); 
      $address->setBaseDiscountAmount(-$discount); 
      $address->setGrandTotal($grandTotal - $discount); 
      $address->setBaseGrandTotal($baseGrandTotal - $discount); 
      $address->setSubtotal($baseGrandTotal - $discount); 

     } else if (Mage::getSingleton('core/session')->getGlobalDiscount()) { 
      $discount = Mage::getSingleton('core/session')->getGlobalDiscount(); 
      $this->amount = Mage::getSingleton('core/session')->getGlobalDiscount(); 
      $address->setDiscountAmount(-$discount); 
      $address->setBaseDiscountAmount(-$discount); 
      $address->setGrandTotal($grandTotal - $discount); 
      $address->setBaseGrandTotal($baseGrandTotal - $discount); 
      $address->setSubtotal($baseGrandTotal - $discount); 
     } 
     return $this; 
    } 

    public function fetch(Mage_Sales_Model_Quote_Address $address) 
    { 
     if(Mage::getSingleton('core/session')->getGlobalDiscount()) { 
      if(!$this->set) { 
       $address->addTotal(array(
        'code'=>$this->getCode(), 
        'title'=>Mage::helper('catalog')->__('Global Discount (-)'), 
        'value'=> $this->amount 
       )); 
       $this->set = 1; 
      } 
     } 
     return $this; 
    } 
} 

我所做的一切,该教程告诉我,我尝试更新基本综合,总计,小计,应有尽有。它仍然没有正确匹配

我是做错了什么?

还有其他帖子,但他们不清楚。很明显,行项目计算的总数不正确。 。

回答

1

找出它并且在线参考是错误的。

在你的配置XML

  <globaldiscount> 
       <class>winints/globaldiscount</class> 
       <before>subtotal</before> 
      </globaldiscount> 

变化之前,和值在标签内应该是“grand_total”

<after>grand_total</after> 

如果你之前或大部切除术后放置它,你的折扣将不采取因为总计是最后计算的,所以总计的通知。

因此,您的代码可能会计算小计,但不会计算可能给paypal带来不准确估计的总计