Magento здесь немного скучно.
Короче говоря:
Если используется числовое значение без указания идентификационного типа его при условии, что вы делаете ваши работы по идентификатору продукта. Если вы хотите вставить «abc» в качестве значения (не числового), ему будет угрожать SKU.
Лучший способ решить эту проблему - использовать идентификационный код (в вашем случае «SKU») в вашем апи-вызове.
Чтобы ознакомиться с деталями, нажмите здесь. http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.update.html
Или смотрите: Magento 1.5, numeric SKUs and productIdentifierType
Короткий рассказ долго:
Следующая функция вызывается корыта апи приложение/код/ядро / Mage/Каталог/Модель/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 здесь и используя SKU, как «123» thrid линии собирается сделать матч PREG с приведет к истинному. Таким образом, используя свою функцию else, обрабатывая ее как идентификатор вместо sku.
В конце:
Таким образом, сделать свой вызов, как:
$result = $client->call($session, 'catalog_product.update', array('123', array(
'name' => 'Product333222'
), null, 'sku'));