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;
}
正如你可以看到該函數在產品hel上調用以下函數每:
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和使用SKU像「123」的THRID線要做一個預浸匹配會導致如此。因此使用其他函數將其作爲ID來代替sku。
到底:
所以,做你的電話一樣:
$result = $client->call($session, 'catalog_product.update', array('123', array(
'name' => 'Product333222'
), null, 'sku'));