我正在使用 SOAP 实现 Magento 客户端,并且我正在对 Magento 进行一些更改,以提高应用程序的整体性能。为此,我试图减少对 Magento 服务的调用次数。
例如,我想为购物车创建新的报价,并通过一次调用为其设置客户。为了实现这一目标,我改变了
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 无法转换我的参数的原因。现在可以了!
无论如何谢谢:)
问题在于声明,因为整个实体无法通过肥皂请求传递:
<part name="customer" type="typens:shoppingCartCustomerEntity"/>
将其更改为键入:
<part name="customer" type="xsd:int"/>
或 xsd:string
然后仅将 customer_id 传递给您的方法。然后在您的自定义 api 方法中加载整个实体数据:
$customer = Mage::getModel('customer/customer')->load($customer_id);