2013-07-19 68 views
1

我正在實現一個使用SOAP的Magento客戶端,並且我正在對Magento進行一些更改以提高應用程序的整體性能。爲此,我試圖減少對Magento服務的呼叫數量。Magento - 添加參數到soap方法

例如,我想爲購物車創建新報價並通過一次調用爲其設置客戶。要做到這一點,我已經改變了app\code\core\Mage\Checkout\etc\wsdl.xml

<message name="shoppingCartCreateRequest"> 
    <part name="sessionId" type="xsd:string"/> 
    <part name="storeId" type="xsd:string"/> 
    <part name="customer" type="typens:shoppingCartCustomerEntity"/> <!--added this line --> 
</message> 

和文件/optiMage/app/code/core/Mage/Checkout/Model/Cart/Api.php中,我已經改變了方法來創建這樣:

public function create($store = null, $customer = 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(); 
    } catch (Mage_Core_Exception $e) { 
     $this->_fault('create_quote_fault', $e->getMessage()); 
    } 
    $quoteId = (int) $quote->getId(); 

    try{ 
     $service = new Mage_Checkout_Model_Cart_Customer_Api_V2(); 
     $res = $service->set($quoteId, $customer); 
    } catch (Mage_Core_Exception $e) { 
     $this->_fault('customer_not_set', $e->getMessage()); 
    } 

    return $quoteId; 
} 

這個問題似乎是參數我添加($ customer)無法以某種方式訪問​​。當我嘗試轉儲它時,服務器停止運行,並不會向我的應用程序返回任何內容。

你能幫助我嗎?如果不夠清楚,請告訴我。謝謝!

PS:$ quoteId仍在生成。當我嘗試與新變量進行交互時出現問題。

============ ============編輯 我發現這個問題:我的客戶端應用程序將派遣一個不同類型的對象,這就是爲什麼Magento無法施放我的參數。現在它工作了!

不管怎樣,謝謝:)

回答

1

問題是聲明,作爲整個實體不能通過SOAP請求傳遞:

<part name="customer" type="typens:shoppingCartCustomerEntity"/> 

改變它輸入:

<part name="customer" type="xsd:int"/> 

或XSD:字符串

然後只將customer_id傳遞給你的方法。然後在您的自定義API方法加載整個entitiy數據:

$customer = Mage::getModel('customer/customer')->load($customer_id); 
+0

我同意,我可以通過客戶ID,而不是一個整體的對象,但「shoppingCartCustomerSetRequest」確實收到一個對象(而不是ID)。我也會定製客戶模式,我不認爲只需添加每一個字段就可以解決問題。 – MatheusJardimB

+0

解決。 +1爲你的努力:D – MatheusJardimB