我正在使用SOAPV2和WS-I的Magento CE 1.7.0.2。我正在尝试使用 catalogProductUpdate-方法。

下面的代码示例中的描述已更新,但是制造商-Attribute(= select)却没有。的结果 catalogProductUpdatebool(true).

我尝试了一些(不太好,但我很拼命;-))变体,例如:

  1. 将整数值777分配给 $manufacturer->value 设置值
  2. 在内部/不添加额外的_attributes字段设置产品ID(但我确定需要在附加_attributes中设置它)
  3. 将制造商名称设置为 $manufacturer->value 而不是价值777

代码:

$newProductData = new stdClass();
$additionalAttrs = array();

$manufacturer = new stdClass();
$manufacturer->key = "manufacturer";
$manufacturer->value = "777";
$additionalAttrs['single_data'][] = $manufacturer;

$newProductData->description = "Description Test1";
$newProductData->additional_attributes = $additionalAttrs;

$result = $client->catalogProductUpdate((object)array('sessionId' => $sessionId,
        'productId' => "2110000010058 ",
        'productData' => (object)$newProductData,
        NULL,
        'sku'
    ));

编辑:

  • 我用没有WS -I的SOAPV2对其进行了测试 - 正常工作。
  • 我还创建了另一个用于使用相同设置(下拉范围,范围,...)进行测试的属性,该设置也不会使用SOAPV2 WS-I更新,但使用SOAPV2进行了更新。因此,这些新创建的属性作为制造商 - 属性行为。
  • 尝试在附加_attributes中设置文本场的值也行不通。

对此有任何想法,链接,建议吗?

关联:http://www.magentocommerce.com/api/soap/catalog/catalogproduct/catalog_product.update.html

有帮助吗?

解决方案

我终于找到了问题和解决方案的原因:

问题:带有WS-I的SOAPV2不使用 single_datamulti_data 属性。因此入住 /app/code/core/Mage/Catalog/Model/Product/Api/V2.php_prepareDataForSave 失败。方法 _prepareDataForSave 检查 single_datamulti_data 根据WS-I的WSDL,这两者都不是肥皂呼叫的一部分。

SOAPV2(WSDL) - calogproductuctucteeentity:

<element name="additional_attributes" type="typens:catalogProductAdditionalAttributesEntity" minOccurs="0"/>

带有WS -I(WSDL)的SOAPV2- calogproductuctecreateentity:

<xsd:element name="additional_attributes" type="typens:associativeArray" minOccurs="0">
</xsd:element>

AssociativeArray具有类型的关联性,其中包括密钥/值对。在soapv2中,ws-i, catalogProductAdditionalAttributesEntity 使用(由单_DATA和/或MULTI_DATA值组成,再次包括键/值对)。

这是WSDL的SOAPV2 WS-I一部分,描述了附加_attributes的格式:

<xsd:complexType name="associativeEntity">
   <xsd:sequence>
      <xsd:element name="key" type="xsd:string"/>
      <xsd:element name="value" type="xsd:string"/>
   </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="associativeArray">
   <xsd:sequence>
      <xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:associativeEntity"/>
   </xsd:sequence>
</xsd:complexType>

检查附加_ATTRIBUTE的检查 /app/code/core/Mage/Catalog/Model/Product/Api/V2.php 措辞正常,但是单_data或multi_data的检查总是返回false。

解决方案:

我发现了另一个肥皂问题 这里 最后一个答案是解决我问题的方法: https://stackoverflow.com/a/9502311/865443)。所以我将这个块放在我的代码中 _prepareDataForSave 解决了设置附加_attributes值的问题:

if (gettype($productData->additional_attributes) == 'array') {
            foreach ($productData->additional_attributes as $k => $v) {
                    $_attrCode = $k;
                    $productData->$_attrCode = $v;
            }
  }

我希望这可以帮助其他人遇到同样的问题。我还要感谢SOAPV2和SOAPV2 WS-I和/或其他解决此问题的方法之间的差异解释。

许可以下: CC-BY-SA归因
scroll top