背景
我正在尝试使用Savon通过 Magento SOAP API 创建一个类别。在任何人建议之前,我不能使用 Magento SOAP v2 或 REST API。
此代码设置我的客户端并登录:
@client = Savon.client(wsdl: "#{EnvConfig.base_url}/api/soap/?wsdl", log_level: :debug, raise_errors: true, pretty_print_xml: true)
response = @client.call(:login, message: {
username: EnvConfig.magento_api_user,
apiKey: EnvConfig.magento_api_key
})
@token = response.to_hash[:login_response][:login_return]
然后我可以调用 magentos 的各种方法。要列出所有产品,我可以致电:
@response = @client.call(:call, message: {session: @token, method: 'catalog_product.list'})
这一切都正常工作,所以上面的任何代码似乎都没有问题。
问题
当我调用catalog_category.create时,我收到了一个错误。如果我只使用 parentID 参数调用该方法:
@response = @client.call(:call, message: {session: @token, method: 'catalog_category.create', parent_id: 90})
然后 Savon 发送以下 XML:
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:typens="urn:Magento" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<typens:call>
<session>6939ace91ba26b1da9a21334d7ef2c13</session>
<method>catalog_category.create</method>
<parentId>90</parentId>
</typens:call>
</env:Body>
</env:Envelope>
这将返回响应Savon::SOAPFault: (103) Attribute "name" is required
:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>103</faultcode>
<faultstring>Attribute "name" is required.</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我希望如此,因为API 文档清楚地表明以下属性不是可选的:
- 父母身份
- 类别数据
- 姓名
- 活跃
- available_sort_by
- default_sort_by
- include_in_menu
因此,如果我拨打包含以下内容的电话name
:
@response = @client.call(:call, message: {session: @token, method: 'catalog_category.create', parent_id: 90, category_data: {name: 'Fooooo'}})
此 XML 被发送:
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:typens="urn:Magento" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<typens:call>
<session>6939ace91ba26b1da9a21334d7ef2c13</session>
<method>catalog_category.create</method>
<parentId>90</parentId>
<categoryData>
<name>Fooooo</name>
</categoryData>
</typens:call>
</env:Body>
</env:Envelope>
但我得到一个Savon::SOAPFault: (SOAP-ENV:Client) Error cannot find parameter
错误:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Error cannot find parameter</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我花了很长时间试图解决这个问题,并尝试发送name
参数而不将其包装在 categoryData 以及其他参数中。全部返回相同的错误消息。
至少,最好知道找不到哪个参数!
任何帮助将不胜感激:)