0

i'm new at magento api and need some help...

when i want to call connectorSyncMultiUpdateProduct(...) i'll get this Error:

Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Server] Procedure 'connectorSyncMultiUpdateProduct' not present in test_connect.php

test_connect.php

$api_v2_18 = 'http://localhost/emalo_mag/index.php/api/v2_soap?wsdl=1
$apiuser_18 = 'magento';
$apikey_18 = 'magento';
$client = new SoapClient( $api_v2_18, $options );
$sessionId = $client->login( $apiuser_18, $apikey_18 );

$result = $client->connectorSyncMultiUpdateProduct($sessionId, array("2", "3"), array("1", "2"));

My Structure

MyCompany
-- Connector
   - Block
   - etc
     - adminhtml.xml
     - api.xml
     - config.xml
     - system.xml
     - wsdl.xml
     - wsi.xml
   - Helper
     - Data.php
   - Model
     - Catalog
       - ...
     - Resource
       - ...
     - Sync
       - Api
         - V2.php
       - Api.php

api.xml

<?xml version="1.0"?>
<config>
  <api>
    <resources>
      <connector_sync translate="title" module="connector">
        <model>MyCompany_Connector_Model_Sync_Api</model>
        <title>MyCompany Product API</title>
        <acl>connector/sync</acl>
        <methods>
          <multiUpdateProduct translate="title" module="connector">
            <title>Multi Update</title>
            <acl>connector/sync/multiUpdateProduct</acl>
            <method>multiUpdateProduct</method>
          </multiUpdateProduct>
        </methods>
      </connector_sync>
    </resources>
    <resources_alias>
      <sync>connector_sync</sync>
    </resources_alias>
    <v2>
      <resources_function_prefix>
        <sync>connectorSync</sync>
      </resources_function_prefix>
    </v2>
    <acl>
      <resources>
        <connector translate="title" module="connector">
          <title>Connector</title>
          <sync translate="title" module="connector">
            <title>Sync</title>
            <sort_order>110</sort_order>
            <multiUpdateProduct translate="title" module="connector">
              <title>MultiUpdateProduct</title>
            </multiUpdateProduct>
          </sync>
        </connector>
      </resources>
    </acl>
  </api>
</config>

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <modules>
    <myCompany_connector>
      <version>0.1.0</version>
    </myCompany_connector>
  </modules>

  <global>
    <helpers>
      <myCompany_connector>
        <class>MyCompany_connector_Helper</class>
      </myCompany_connector>
    </helpers>

    <models>

      <myCompany_connector>
        <class>MyCompany_connector_Model</class>
      </myCompany_connector>

      <catalog>
        <rewrite>
          <product_api>MyCompany_connector_Model_Catalog_Product_Api</product_api>
          <product_api_v2>MyCompany_connector_Model_Catalog_Product_Api_V2</product_api_v2>
        </rewrite>
      </catalog>
    </models>

    <blocks>
      <myCompany_connector>
        <class>MyCompany_connector_Block</class>
      </myCompany_connector>
      <adminhtml>
        <rewrite>
          <sales_order_grid>MyCompany_connector_Block_Adminhtml_Sales_Order_Grid</sales_order_grid>
        </rewrite>
      </adminhtml>
    </blocks>
    <events>
      <catalog_product_save_after>
        <observers>
          <myCompany_connector_observer>
            <type>singleton</type>
            <class>MyCompany_connector_Model_Observer</class>
            <method>logUpdate</method>
          </myCompany_connector_observer>
        </observers>
      </catalog_product_save_after>

      <admin_system_config_changed_section_MyCompany_options>
        <observers>
          <MyCompanyconnector>
            <class>MyCompany_connector_Model_Observer</class>
            <method>validateAdminLicense</method>
            <type>singleton</type>
          </MyCompanyconnector>
        </observers>
      </admin_system_config_changed_section_MyCompany_options>

      <sales_order_save_after>
        <observers>
          <MyCompanyconnector>
            <type>singleton</type>
            <class>MyCompany_connector_Model_Observer</class>
            <method>onSalesOrderSaveAfter</method>
          </MyCompanyconnector>
        </observers>
      </sales_order_save_after>
    </events>

  </global>

  <default>
    <myCompany_connector>
      <config>
        <MyCompanyCategoriesSeparator><![CDATA[//]]></MyCompanyCategoriesSeparator>
      </config>
    </myCompany_connector>
  </default>    
</config>

wsdl.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:typens="urn:{{var wsdl.name}}" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" name="{{var wsdl.name}}" targetNamespace="urn:{{var wsdl.name}}">
  <types>
    <schema xmlns = "http://www.w3.org/2001/XMLSchema" targetNamespace = "urn:Magento">
      <complexType name = "catalogProductCreateEntity">
        <all>
          <element name = "associated_skus" type = "typens:ArrayOfString" minOccurs = "0"/>
          <element name = "configurable_attributes" type = "typens:ArrayOfString" minOccurs = "0"/>
          <element name = "price_changes" type = "typens:associativeArray" minOccurs = "0"/>
        </all>
      </complexType>
      <complexType name = "catalogProductCreateEntityArray">
        <complexContent>
          <restriction base = "soapenc:Array">
            <attribute ref = "soapenc:arrayType" wsdl:arrayType = "typens:catalogProductCreateEntity[]"/>
          </restriction>
        </complexContent>
      </complexType>
    </schema>
  </types>

  <binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />

    <!--BEGIN CUSTOMER BINDINGS -->
    <operation name="connectorSyncMultiUpdateProduct18">
      <soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
      <input>
        <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
      </input>
      <output>
        <soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
      </output>
    </operation>
    <!--END CUSTOMER BINDINGS -->
  </binding>
  <!-- END BINDINGS -->

  <portType name = "{{var wsdl.handler}}PortType">
    <operation name = "connectorSyncMultiUpdateProduct18">
      <documentation>Remove all product assignments from a category</documentation>
      <input message = "typens:connectorSyncMultiUpdateProduct18Request"/>
      <output message = "typens:connectorSyncMultiUpdateProduct18Response"/>
    </operation>
  </portType>
  <!-- END PORTTYPE -->

  <message name = "connectorSyncMultiUpdateProduct18Request">
    <part name = "sessionId" type = "xsd:string"/>
    <part name = "productIds" type = "typens:ArrayOfString"/>
    <part name = "productData" type = "typens:catalogProductCreateEntityArray"/>
    <part name = "store" type = "xsd:string"/>
    <part name = "identifierType" type = "xsd:string"/>
  </message>
  <message name = "connectorSyncMultiUpdateProduct18Response">
    <part name = "result" type = "xsd:boolean"/>
  </message>
</definitions>

wsi.xml

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:typens="urn:{{var wsdl.name}}"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  name="{{var wsdl.name}}"
                  targetNamespace="urn:{{var wsdl.name}}">
  <wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:{{var wsdl.name}}">
      <xsd:complexType name="complexMultiFilter">
        <xsd:sequence>
          <xsd:element name="key" type="xsd:string" />
          <xsd:element name="value" type="typens:associativeArray" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="complexMultiArray">
        <xsd:sequence>
          <xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:complexMultiFilter" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="catalogProductCreateEntity">
        <xsd:sequence>
          <xsd:element name="associated_skus" type="typens:ArrayOfString" minOccurs="0" />
          <xsd:element name="configurable_attributes" type="typens:ArrayOfString" minOccurs="0" />
          <xsd:element name="price_changes" type="typens:complexMultiArray" minOccurs="0" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="connectorSyncMultiUpdateProduct18Request">
    <wsdl:part name="sessionId" type="xsd:string" />
    <wsdl:part name="productIds" type="typens:ArrayOfString" />
    <wsdl:part name="productData" type="typens:catalogProductCreateEntityArray" />
    <wsdl:part name="store" type="xsd:string" />
    <wsdl:part name="identifierType" type="xsd:string" />
  </wsdl:message>
  <wsdl:message name="connectorSyncMultiUpdateProduct18Response">
    <wsdl:part name="result" type="xsd:boolean" />
  </wsdl:message>

  <wsdl:portType name="{{var wsdl.handler}}PortType">

    <wsdl:operation name="connectorSyncMultiUpdateProduct18">
      <wsdl:documentation>Retrieve customer groups</wsdl:documentation>
      <wsdl:input message="typens:mapy_customerGroupListRequest" />
      <wsdl:output message="typens:mapy_customerGroupListResponse" />
    </wsdl:operation>

  </wsdl:portType>

  <wsdl:binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

    <wsdl:operation name="connectorSyncMultiUpdateProduct18">
      <soap:operation soapAction=""/>
      <wsdl:input>
        <soap:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" />
      </wsdl:output>
    </wsdl:operation>

  </wsdl:binding>
</wsdl:definitions>

MyCompany/Connector/Model/Sync/Api.php

<?php
class MyCompany_Connector_Model_Sync_Api extends Mage_Api_Model_Resource_Abstract {

  public function multiUpdateProduct($productIds, $productData, $store = null, $identifierType = null)
  {
    return true;
  }

}

MyCompany/Connector/Model/Sync/Api/V2.php

<?php
class MyCompany_Connector_Model_Sync_Api_V2 extends MyCompany_Connector_Model_Sync_Api {

  public function multiUpdateProduct($productIds, $productData, $store = null, $identifierType = null)
  {
    return true;
  }

}

I'll hope that anyone can help me...

Thanks in advance :)

Marius
  • 197,939
  • 53
  • 422
  • 830
mankoe
  • 21
  • 1
  • 4

1 Answers1

1

You declared in wsdl.xml your operation name connectorSyncMultiUpdateProduct18:

<wsdl:operation name="connectorSyncMultiUpdateProduct18">
  <soap:operation soapAction=""/>
  <wsdl:input>
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output>
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>

but you call it connectorSyncMultiUpdateProduct. Either remove the 18 at the end of your declaration or call it as you declare it.

Marius
  • 197,939
  • 53
  • 422
  • 830