我正在尝试使用Magento的SOAP v2 API(Magento Enterprise,版本1.12.0.2)与产品及其属性进行交互,但是我们的商店有很多可定制的自定义属性。除了默认名称,描述,价格等以外,我们还有其他属性,我无法通过SOAP v2访问。我尝试使用catalogProductUpdate方法来编辑属性(devdocs page here),但是我不明白如何正确设置“additional_attributes”字段以允许编辑自定义属性。我不断收到错误消息,说它的格式不正确。例如,我们有音乐产品,因此我们要为“艺术家”字段设置一个值。
我们的Magento中未启用WS-I合规性。
我在使用new-webserviceproxy的Powershell 3.0中,所以我认为这意味着我在使用.NET框架。所以我的尝试看起来像这样
$proxy = new-webserviceproxy -uri $soapuri
$sessionid = $proxy.login($username,$password)
$array1 = @{"key"="artist";"value"="4845"} #I also tried setting the value to the name instead of the ID number (ie. "key" = "artist";"value"="Billy Joel") but that returned the same error.
$array2 = @{"single_data" = $array1}
$proxy.catalogproductupdate($sessionid, <a sku number>, "admin", @{"additional_attributes" = $array2}, "sku")
但是返回的是一条错误消息,提示属性更新不期望“system.collections.hashtable”。我相信我只是关于single-data / multi_data嵌套的格式有误。从我的理解来看,additional_attributes参数的数组要求其中包含“single_data”参数,而“single_data”内部应为实际的属性列表和值。因此,总而言之,它就像一个3层哈希表。
我能够使用哈希表格式来编辑其他非自定义属性,因此我知道问题不在于哈希表本身。只是“additional_attributes”字段。
感谢您的协助。
最佳答案
想通了-终于!希望这可以为将来的Magento用户节省一些麻烦。要编辑其他属性,您必须使用属性的ID号和属性值的ID格式(以我的示例为例)$array1
的格式。
所以我的$array1
看起来像这样:
$ array1 = @ {“key” =“200”;“value” =“4845”}
因此,“200”是我们magento中“艺术家”的属性ID。 “4845”是我要选择的值的ID(在本例中为Billy Joel)。因此,您必须使用catalogProductAttributeList
查找这些值,并将列出所有属性的ID号。
编辑:当我按照我刚才所说的运行它时,它返回“True”(这应该意味着它可以工作),我立即输入了它,但是当我在Magento中查看产品时,它实际上并没有更新。因此,我尝试了将ID与单词进行几种不同的组合,最终起作用的是我在原始问题中使用的格式。我不知道为什么前几天尝试时不起作用,但是我发誓现在可以起作用,而且我没有改变任何事情。我可能会发生这种情况的唯一假设是我运行了catalogProductAttributeList
方法,并且也许以某种方式为我需要编辑的自定义属性创建了基础。但是现在一切都好了,这个答案是无效的,对我有用的是问题中的原始例子。希望我有一个更好的解释。
关于.net - Powershell 3.0中的SOAP语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925627/