バックグラウンド
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})
次に、次の XML が Savon によって送信されます。
<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ドキュメントでは、次の属性がオプションではないことが明確になっているため、これを期待しています。
- 親ID
- カテゴリデータ
- 名前
- アクティブです
- 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 でラップせずにパラメーターを送信しようとしました。すべて同じエラー メッセージを返します。
少なくとも、どのパラメータが見つからないかを知っておくとよいでしょう!
どんな助けでも本当に感謝します:)