Sku不在magento产品更新API中工作

时间:2014-08-30 09:35:09

标签: api magento

$result = $client->call($session, 'catalog_product.update', array('123', array(
                                                            'name' => 'Product333222'
                                                        )
                                                    )
                                                    );

这里' 123'是产品的Sku。 Sku在更新Api中没有在这里工作。

如果我提供产品ID代替Sku,它工作正常。

那背后的问题是什么。

如果有人知道,请告诉我。

感谢。

1 个答案:

答案 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'));