$result = $client->call($session, 'catalog_product.update', array('123', array(
'name' => 'Product333222'
)
)
);
这里' 123'是产品的Sku。 Sku在更新Api中没有在这里工作。
如果我提供产品ID代替Sku,它工作正常。
那背后的问题是什么。
如果有人知道,请告诉我。
感谢。
答案 0 :(得分:3)
Magento在这里有点沉闷。
长话短说:
如果您使用数字值而未指定标识类型,则假定您正在对产品ID进行操作。如果您在哪里插入" abc"作为一个值(不是数字),它将被视为一个SKU。
解决此问题的最佳方法是在api通话中使用识别类型(在您的情况下为" SKU")。
有关使用识别类型的更多信息,请参阅此处。 http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.update.html
或者看:Magento 1.5, numeric SKUs and productIdentifierType
短篇小说:
通过api调用以下函数 应用程序/代码/核心/法师/目录/型号/原料药/ Resource.php
protected function _getProduct($productId, $store = null, $identifierType = null)
{
$product = Mage::helper('catalog/product')->getProduct($productId, $this->_getStoreId($store), $identifierType);
if (is_null($product->getId())) {
$this->_fault('product_not_exists');
}
return $product;
}
如您所见,该函数正在产品助手中调用以下函数:
public function getProduct($productId, $store, $identifierType = null) {
$loadByIdOnFalse = false;
if ($identifierType == null) {
if (is_string($productId) && !preg_match("/^[+-]?[1-9][0-9]*$|^0$/", $productId)) {
$identifierType = 'sku';
$loadByIdOnFalse = true;
} else {
$identifierType = 'id';
}
}
/** @var $product Mage_Catalog_Model_Product */
$product = Mage::getModel('catalog/product');
if ($store !== null) {
$product->setStoreId($store);
}
if ($identifierType == 'sku') {
$idBySku = $product->getIdBySku($productId);
if ($idBySku) {
$productId = $idBySku;
}
if ($loadByIdOnFalse) {
$identifierType = 'id';
}
}
if ($identifierType == 'id' && is_numeric($productId)) {
$productId = !is_float($productId) ? (int) $productId : 0;
$product->load($productId);
}
return $product;
}
此处未指定$ identifierType并使用类似' 123'的sku第三行将进行preg匹配将导致true。因此,使用其else函数将其作为ID而不是sku。
最后:
所以,请拨打电话:
$result = $client->call($session, 'catalog_product.update', array('123', array(
'name' => 'Product333222'
), null, 'sku'));