3

バックグラウンド

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 でラップせずにパラメーターを送信しようとしました。すべて同じエラー メッセージを返します。

少なくとも、どのパラメータが見つからないかを知っておくとよいでしょう!

どんな助けでも本当に感謝します:)

4

1 に答える 1