2

在 Magento 1.5 中,像这样从 C# 访问 catalogProductInfo API 调用适用于非数字 SKU:

catalogProductRequestAttributes fetchattrib = new catalogProductRequestAttributes();
fetchattrib.attributes = new string[] { "name", "description", "and_so_on"};
fetchattrib.additional_attributes = new string[] { "custom_attribs_go_here"};

string storeView = null;
string productIdentifierType = null;
catalogProductReturnEntity ret = m_magentoClient.catalogProductInfo(
    sessionId, sku, storeView, fetchattrib, productIdentifierType);

但是对于数字 SKU,我会收到“产品不存在”错误。
这大概是因为 Magento 无法判断您传递的是 product_id 还是 SKU。根据我能找到的所有文档,理论上,将 productIdentifierType 设置为“sku”应该可以解决这个问题:

...
string productIdentifierType = "sku";
...

但它不能解决它。
事实上,这似乎使情况变得更糟,Magento 然后停止查找非数字 SKUS。
所以大概"sku"不是传递的正确值。

有人有什么想法吗?

4

2 回答 2

10

有一个纯数字或混合 SKU 的解决方法,对我来说效果很好。

只需在 SKU 末尾添加一个空格即可。Magento 会将值解释为 SKU,因为空格不是数字。内部 Magento 稍后会修剪空白

这在 Magento 1.4.x - 1.9 中完美运行。(编辑:感谢 Brett 使用 1.9 进行测试)

例子:

    catalogProductReturnEntity ret = m_magentoClient.catalogProductInfo(sessionId, sku+" ", storeView, fetchattrib, productIdentifierType); 
于 2012-06-06T13:33:12.983 回答
4

简短的回答是某处存在一个错误,阻止了最后一个参数的product.update正确设置(或者 Varien 可能尚未实现它),这也给方法带来了问题product.info

一个快速的解决方法(如果您不介意失去按 ID 更新的选项)只是$identifierType在 Product APIupdate()方法中设置):

app/code/core/Mage/Catalog/Model/Product/Api.phpl.198

public function update($productId, $productData, $store = null, $identifierType = 'sku')

最后在 app/code/core/Mage/Catalog/Helper/Product.php 的 l.427 附近的方法 getProduct() 的 if ($idBySku) 条件下加载产品

$productId = $idBySku;
$product->load($productId);

这有点软糖。我会寻找更好的解决方法作为替代;否则,也许其他人可以发布更好的解决方案。

于 2011-10-21T11:24:59.767 回答