2012-02-14 50 views
6

我對如何在報價方法中調用報價和訂單有疑問。我所知道的是報價是一系列提供的產品或服務。在magento中,報價數據是在單擊Onepage Checkout的下訂單按鈕之前創建的。訂單下達後在Magento中創建訂單數據。如果訂單已確認,則發票將顯示在訂單旁邊。Magento - 報價和訂單之間的區別

但我想知道爲什麼類Mage_Payment_Model_Method_Abstract在validate方法檢查信息類的實例,如果它是Mage_Sales_Model_Order_Payment的一個實例採取getOrder()其他需要的getQuote()

我不隨本清。是否兩次調用Validate()函數,即第一次創建Quote時,第二次創建Order時,或者是兩次調用Payment Method類本身。

請澄清我的困惑。

/** 
     * Validate payment method information object 
     * 
     * @param Varien_Object $info 
     * @return Mage_Payment_Model_Abstract 
     */ 
     public function validate() 
     { 
      /** 
       * to validate paymene method is allowed for billing country or not 
       */ 
      $paymentInfo = $this->getInfoInstance(); 
      if ($paymentInfo instanceof Mage_Sales_Model_Order_Payment) { 
       $billingCountry = $paymentInfo->getOrder()->getBillingAddress()->getCountryId(); 
      } else { 
       $billingCountry = $paymentInfo->getQuote()->getBillingAddress()->getCountryId(); 
      } 
      if (!$this->canUseForCountry($billingCountry)) { 
       Mage::throwException($this->_getHelper()->__('Selected payment type is not allowed for billing country.')); 
      } 
      return $this; 
     } 

回答

11

Magento中的報價基本上是尚未下達的訂單。它包含產品項目(購物車),地址和付款/運輸方式。只要您將商品添加到購物車,它就會創建。在結帳期間,帳單和運費數據將添加到報價中。最後,當用戶點擊下單時,報價轉換爲訂單。

要回答您關於付款驗證的問題:付款方式包含在報價單以及訂單中,並在兩個地方進行驗證。付款方式可能僅限於某些國家/地區,因此在驗證方法中,報價的付款方式將驗證報價國家,訂單的付款方式將驗證訂單國家/地區。