我目前正在使用一个名为'catalogProductList' (http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.list.html)的SOAP方法,它检索catalogProductEntity的数组。
问题是catalogProductEntity
没有一些属性,如"价格"one_answers"描述"。问题是:是否有任何(已经实现的)SOAP方法可以通过一次调用为我提供这些信息?
如果没有,我如何/在哪里可以将这些字段添加到返回值?我的意思是,更改服务器端的php代码,以便在一次调用中获得这个"产品详细列表"。
我试图避免对每个产品进行多次查询以获得此信息。
PS:我使用Magento 1.7.
根据@Mat提示,我编辑了appcodecoreMageCatalogModelProductApi.php文件,我的方法items
就像这样:
public function items($filters = null, $store = null)
{
$collection = Mage::getModel('catalog/product')->getCollection()
->addStoreFilter($this->_getStoreId($store))
->addAttributeToSelect('price')
->addAttributeToSelect('description')
->addAttributeToSelect('name');
/** @var $apiHelper Mage_Api_Helper_Data */
$apiHelper = Mage::helper('api');
$filters = $apiHelper->parseFilters($filters, $this->_filtersMap);
try {
foreach ($filters as $field => $value) {
$collection->addFieldToFilter($field, $value);
}
} catch (Mage_Core_Exception $e) {
$this->_fault('filters_invalid', $e->getMessage());
}
$result = array();
foreach ($collection as $product) {
$result[] = array(
'product_id' => $product->getId(),
'sku' => $product->getSku(),
'price' => $product->getData('price'),
'description'=> $product->getData('description'),
'name' => $product->getName(),
'set' => $product->getAttributeSetId(),
'type' => $product->getTypeId(),
'category_ids' => $product->getCategoryIds(),
'website_ids' => $product->getWebsiteIds()
);
}
error_log(print_r($result, true) . "n", 3, "c:log.txt");
return $result;
}
日志文件输出如下结果:
Array
(
[0] => Array
(
[product_id] => 3
[sku] => sim12ple1235
[price] => 99.9500
[description] => Simple Description
[name] => Simple Product
[set] => 4
[type] => simple
[category_ids] => Array
(
)
[website_ids] => Array
(
[0] => 1
)
)
)
注意,价格和描述在$result变量中,但是我在客户端应用程序中得到的xml响应是:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:catalogProductListResponse>
<storeView SOAP-ENC:arrayType="ns1:catalogProductEntity[1]" xsi:type="ns1:catalogProductEntityArray">
<item xsi:type="ns1:catalogProductEntity">
<product_id xsi:type="xsd:string">3</product_id>
<sku xsi:type="xsd:string">sim12ple1235</sku>
<name xsi:type="xsd:string">Simple Product</name>
<set xsi:type="xsd:string">4</set>
<type xsi:type="xsd:string">simple</type>
<category_ids SOAP-ENC:arrayType="xsd:string[0]" xsi:type="ns1:ArrayOfString"/>
<website_ids SOAP-ENC:arrayType="xsd:string[1]" xsi:type="ns1:ArrayOfString">
<item xsi:type="xsd:string">1</item>
</website_ids>
</item>
</storeView>
</ns1:catalogProductListResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我的问题是:是否有任何xml模式或其他配置文件指定输出?还有什么我错过了编辑在服务器端?
要获取产品信息,必须使用catalog_product.info
你先得到列表,然后在列表上循环得到产品的详细信息。
$list = $proxy->catalogProductList($sessionId, $filters);
for($i = 0; $i < count($list); $i ++){
$current = $list[$i];
$product = $proxy->catalogProductInfo($sessionId, $current['product_id']);
}
////UPDATE////
要更改catalogProductList代码,请转到
appcodecoreMageCatalogModelProductApi.php
并在
中添加所需的参数public function items
在循环
之前执行类似的操作$collection = Mage::getModel('catalog/product')->getCollection()
->addStoreFilter($this->_getStoreId($store))
->addAttributeToSelect('name');
必须加上
->addAttributeToSelect('what_you_need');
foreach ($collection as $product) {
$result[] = array(
'product_id' => $product->getId(),
'sku' => $product->getSku(),
'name' => $product->getName(),
'set' => $product->getAttributeSetId(),
'type' => $product->getTypeId(),
'category_ids' => $product->getCategoryIds(),
'website_ids' => $product->getWebsiteIds(),
'what_you_need' => $product->getData('what_you_need')
);
}
///////更新(由于@matheusjardimb)
最后你必须加上
what_you_need
元素到
app/code/core/mage/catalog/etc/wsdl.xml
在xml的这一部分
<complexType name="catalogProductEntity">
<all>
<element name="product_id" type="xsd:string"/>
<element name="sku" type="xsd:string"/>
<element name="name" type="xsd:string"/>
<element name="set" type="xsd:string"/>
<element name="type" type="xsd:string"/>
<element name="category_ids" type="typens:ArrayOfString"/>
<element name="website_ids" type="typens:ArrayOfString"/>
<element name="**what_you_need**" type="xsd:string"/>
</all>
</complexType>
问题是在应用php更改后,它在文件app/code/core/Mage/Catalog/etc/wsdl.xml中丢失了这些字段(价格和描述)。
...
<complexType name="catalogProductEntity">
<all>
<element name="product_id" type="xsd:string"/>
<element name="sku" type="xsd:string"/>
<element name="name" type="xsd:string"/>
<element name="set" type="xsd:string"/>
<element name="type" type="xsd:string"/>
<element name="category_ids" type="typens:ArrayOfString"/>
<element name="website_ids" type="typens:ArrayOfString"/>
<element name="price" type="xsd:string"/>
<element name="description" type="xsd:string"/>
</all>
</complexType>
...
别忘了清理缓存!