2011-05-27 126 views
7

我正在嘗試使用Magento Enterprise 1.10 XML-RPC API來處理Magento安裝以外的購物車/目錄功能。我遇到的問題是當我加入購物車時。我可以很好地連接到API端點,登錄和檢索數據。以下是我用來發現Magento API的工作原理的代碼。Magento購物車API不顯示價格

<?php  
    require $_SERVER['DOCUMENT_ROOT'].'/Zend/XmlRpc/Client.php'; 

    $url = 'http://mymagento.com/api/xmlrpc'; 
    $user = 'apiuser'; 
    $pass = 'apipass'; 

    $proxy = new Zend_XmlRpc_Client($url); 
    $sess = $proxy->call('login', array($user, $pass)); 
    $cartId = $proxy->call('call', array($sess, 'cart.create', array(1))); 

    $pList = $proxy->call('call', array($sess, 'product.list', array())); 
    $cList = $proxy->call('call', array($sess, 'customer.list', array())); 

    $cList[0]['mode'] = 'customer'; 

    $setCart = $proxy->call('call', array($sess, 
     'cart_customer.set', 
     array($cartId, $cList[0]))); 

    foreach($pList as $prod) 
    { 
     if($prod['product_id'] == 5) 
     { 
      $prod['qty'] = 5; 
      $addCart = $proxy->call('call', array($sess, 
       'cart_product.add', 
       array($cartId, $pAdd))); 
     } 
    } 

    $cList = $proxy->call('call', array($sess, 'cart.info', array($cartId))); 
    print_r($cList); 

輸出:

[store_id] => 1 
[created_at] => 2011-05-27 13:30:57 
[updated_at] => 2011-05-27 13:31:00 
[converted_at] => 0000-00-00 00:00:00 
[is_active] => 0 
[is_virtual] => 0 
[is_multi_shipping] => 0 
[items_count] => 1 
[items_qty] => 5.0000 
[orig_order_id] => 0 
[store_to_base_rate] => 1.0000 
[store_to_quote_rate] => 1.0000 
[base_currency_code] => USD 
[store_currency_code] => USD 
[quote_currency_code] => USD 
[grand_total] => 0.0000 
[base_grand_total] => 0.0000 
[checkout_method] => customer 
... 
[items] => Array 
(
    [0] => Array 
     (
      [item_id] => 93 
      [quote_id] => 119 
      [created_at] => 2011-05-27 13:31:00 
      [updated_at] => 2011-05-27 13:31:00 
      [product_id] => 5 
      [store_id] => 1 
      [parent_item_id] => 
      [is_virtual] => 1 
      [sku] => product1 
      [name] => product 
      [description] => 
      [applied_rule_ids] => 
      [additional_data] => 
      [free_shipping] => 0 
      [is_qty_decimal] => 0 
      [no_discount] => 0 
      [weight] => 
      [qty] => 5 
      [price] => 0.0000 
      [base_price] => 0.0000 
      [custom_price] => 
      [discount_percent] => 0.0000 
      [discount_amount] => 0.0000 
      [base_discount_amount] => 0.0000 

不過,我只是調用使用相同的上述會議

<?php 
    $pInfo = $proxy->call('call', array($sess, 'catalog_product.info', '5')); 
    print_r($pInfo); 

下面我得到關於產品的下列信息:

[product_id] => 5 
[sku] => product1 
[set] => 9 
[type] => virtual 
[categories] => Array 
    (
    ) 

[websites] => Array 
    (
     [0] => 1 
    ) 

[type_id] => virtual 
[name] => product 
[description] => Test 
[short_description] => Test 
[news_from_date] => 
[old_id] => 
[news_to_date] => 
[status] => 1 
[visibility] => 4 
... 
[created_at] => 2011-05-25 15:11:34 
[updated_at] => 2011-05-25 15:11:34 
... 
[price] => 10.0000 

最後,API se這個項目的價格實際上是10美元,但是當通過API添加到購物車時,價格沒有被適當反映。

+3

解決方案,http://www.magentocommerce.com/boards/viewthread/227044/我花了兩天時間尋找這個,今天拿出一個難以理解的搜索詞來嘗試找到解決方案。 – Justin 2011-05-27 14:29:04

+0

你可以回答你自己的問題並關閉它,FYI。 – B00MER 2011-05-27 15:46:08

+0

我沒有足夠高的貢獻,無法回覆4個小時。= \ – Justin 2011-05-27 19:11:12

回答

6

就這樣它可以是一個正式回答的問題,這裏是解決方案發現,http://magentocommerce.com/boards/viewthread/227044我花了兩天時間尋找這個,今天拿出一個不起眼的搜索詞,試圖找到解決辦法

+0

好的答案Justin ^^ – 2012-08-28 11:23:16

+3

您的答案中的鏈接已更改,並且不再指向解決方案。這一個:https://web.archive.org/web/20120624021427/http://www.magentocommerce.com/boards/viewthread/227044 – snorpey 2015-06-05 10:59:11

1

我我已經看了這個問題幾天了。如果您通過正常的Web界面將產品添加到購物車中,那麼對我來說沒有意義[例如Mage_Checkout_CartController::addAction()]。它知道沒有你提供地址的價格。我終於找到了兩者的區別。在addAction()中,他們創建了一個Mage_Checkout_Model_Cart的實例,將產品添加到該實例並保存。在api中,他們使用Mage_Sales_Model_Quote代替。如果你看一下Mage_Checkout_Model_Cart::save(),你會看到這兩條線:

$this->getQuote()->getBillingAddress(); 
$this->getQuote()->getShippingAddress(); 

這兩行實際上是創建得到保存到數據庫空Mage_Sales_Model_Quote_Address對象。

如果您願意/能夠修改magento的代碼,您可以修改Mage_Checkout_Model_Cart_Api::create()並在$quote->save()之前添加對這兩種方法的調用,並且api和web界面的工作方式相同。

我只測試過這一點,但我真的認爲這是一個錯誤而不是功能。我會在實際的magento開發者面前看到這一點,也許他們會在下一個版本中加入。

0

Magento前端和API都是不同的。在註冊客戶之後的前端爲客戶創建報價,並設置地址與創建的報價ID。但在API中,它僅使用shoppingCartCreate服務創建報價。爲了正確,我們需要定製創建服務。我做了,它爲我工作。

我在這裏提供的解決方案:在文件

編輯功能 - 發現Mage/Checkout/Model/Cart/Api.php

public function create($store = null) 
{ 
    $storeId = $this->_getStoreId($store); 

    try { 
     /*@var $quote Mage_Sales_Model_Quote*/ 
     $quote = Mage::getModel('sales/quote'); 
     $quote->setStoreId($storeId) 
       ->setIsActive(false) 
       ->setIsMultiShipping(false) 
       ->save(); 

/* Customized this for saving default address for quote and it will show price in cart info*/ 
$quote->getBillingAddress(); 
    $quote->getShippingAddress()->setCollectShippingRates(true); 
    $quote->collectTotals(); 
    $quote->save(); 

/* End cart here */ 

    } catch (Mage_Core_Exception $e) { 
     $this->_fault('create_quote_fault', $e->getMessage()); 
    } 
    return (int) $quote->getId(); 
} 
相關問題