扩展Magento的API Soap V2(不是此服务的有效方法)

时间:2013-02-13 18:56:43

标签: api magento soap

我正在尝试创建一个扩展magento V2 soap调用的自定义模块。我的大多数消息都来自这篇文章

How to setup custom api for Magento with SOAP V2?

这是我到目前为止尝试使其工作的步骤。

/app/etc/modules/Namespace_ImportExport.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_ImportExport>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Core />
            </depends>
        </Namespace_ImportExport>
    </modules>
</config>

/app/code/local/Namespace/ImportExport/etc/api.xml

<?xml version="1.0"?>
<config>
   <api>
     <resources>
       <importexport>
            <model>namespace_importexport/api</model>
            <title>api test</title>
            <methods>
                <foo translate="title" module="importexport">
                    <title>Foo Test</title>
                    <method>foo</method>
                </foo>
            </methods>
       </importexport>
    </resources>
    <v2>
        <resources_function_prefix>
           <importexport>importexport</importexport>
        </resources_function_prefix>
    </v2>
  </api>
</config>

/app/code/local/Namespace/ImportExport/etc/config.xml

<config>
    <modules>
        <Namespace_ImportExport>
            <version>0.0.1</version>
        </Namespace_ImportExport>
    </modules>
    <global>
        <models>
            <importexport><class>Namespace_ImportExport_Model</class></importexport>
        </models>
        <models>
            <catalog>
                <rewrite>
                    <product_api_v2>Namespace_ImportExport_Model_Product_Api_V2</product_api_v2>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

/app/code/local/Namespace/ImportExport/etc/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">
            <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />
            <complexType name="catalogProductCreateEntity">
                <all>
                    <element name="categories" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="websites" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="associated" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="name" type="xsd:string" minOccurs="0" />
                    <element name="description" type="xsd:string" minOccurs="0" />
                    <element name="short_description" type="xsd:string" minOccurs="0" />
                    <element name="weight" type="xsd:string" minOccurs="0" />
                    <element name="status" type="xsd:string" minOccurs="0" />
                    <element name="url_key" type="xsd:string" minOccurs="0" />
                    <element name="url_path" type="xsd:string" minOccurs="0" />
                    <element name="visibility" type="xsd:string" minOccurs="0" />
                    <element name="category_ids" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="website_ids" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="has_options" type="xsd:string" minOccurs="0" />
                    <element name="gift_message_available" type="xsd:string" minOccurs="0" />
                    <element name="price" type="xsd:string" minOccurs="0" />
                    <element name="special_price" type="xsd:string" minOccurs="0" />
                    <element name="special_from_date" type="xsd:string" minOccurs="0" />
                    <element name="special_to_date" type="xsd:string" minOccurs="0" />
                    <element name="tax_class_id" type="xsd:string" minOccurs="0" />
                    <element name="tier_price" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="meta_title" type="xsd:string" minOccurs="0" />
                    <element name="meta_keyword" type="xsd:string" minOccurs="0" />
                    <element name="meta_description" type="xsd:string" minOccurs="0" />
                    <element name="custom_design" type="xsd:string" minOccurs="0" />
                    <element name="custom_layout_update" type="xsd:string" minOccurs="0" />
                    <element name="options_container" type="xsd:string" minOccurs="0" />
                    <element name="additional_attributes" type="typens:associativeArray" minOccurs="0" />
                </all>
            </complexType>
            <complexType name="catalogProductReturnEntity">
                <all>
                    <element name="product_id" type="xsd:string" minOccurs="0" />
                    <element name="sku" type="xsd:string" minOccurs="0" />
                    <element name="set" type="xsd:string" minOccurs="0" />
                    <element name="type" type="xsd:string" minOccurs="0" />
                    <element name="categories" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="websites" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="associated" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="created_at" type="xsd:string" minOccurs="0" />
                    <element name="updated_at" type="xsd:string" minOccurs="0" />
                    <element name="type_id" type="xsd:string" minOccurs="0" />
                    <element name="name" type="xsd:string" minOccurs="0" />
                    <element name="description" type="xsd:string" minOccurs="0" />
                    <element name="short_description" type="xsd:string" minOccurs="0" />
                    <element name="weight" type="xsd:string" minOccurs="0" />
                    <element name="status" type="xsd:string" minOccurs="0" />
                    <element name="url_key" type="xsd:string" minOccurs="0" />
                    <element name="url_path" type="xsd:string" minOccurs="0" />
                    <element name="visibility" type="xsd:string" minOccurs="0" />
                    <element name="category_ids" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="website_ids" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="has_options" type="xsd:string" minOccurs="0" />
                    <element name="gift_message_available" type="xsd:string" minOccurs="0" />
                    <element name="price" type="xsd:string" minOccurs="0" />
                    <element name="special_price" type="xsd:string" minOccurs="0" />
                    <element name="special_from_date" type="xsd:string" minOccurs="0" />
                    <element name="special_to_date" type="xsd:string" minOccurs="0" />
                    <element name="tax_class_id" type="xsd:string" minOccurs="0" />
                    <element name="tier_price" type="typens:ArrayOfString" minOccurs="0" />
                    <element name="meta_title" type="xsd:string" minOccurs="0" />
                    <element name="meta_keyword" type="xsd:string" minOccurs="0" />
                    <element name="meta_description" type="xsd:string" minOccurs="0" />
                    <element name="custom_design" type="xsd:string" minOccurs="0" />
                    <element name="custom_layout_update" type="xsd:string" minOccurs="0" />
                    <element name="options_container" type="xsd:string" minOccurs="0" />
                    <element name="additional_attributes" type="typens:associativeArray" minOccurs="0" />
                </all>
            </complexType>
        </schema>
    </types>
    <message name="importexportFooRequest">
        <part name="sessionId" type="xsd:string" />
    </message>
    <message name="importexportFooResponse">
        <part name="result" type="typens:boolean" />
    </message>
    <portType name="{{var wsdl.handler}}PortType">
        <operation name="importexportFoo">
            <documentation>ImportExport Foo</documentation>
            <input message="typens:importexportFooRequest" />
            <output message="typens:importexportFooResponse" />
        </operation>
    </portType>
    <binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
        <operation name="importexportFoo">
            <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>
    </binding>
</definitions>

/app/code/local/Namespace/ImportExport/Model/Api.php

<?php
class Namespace_ImportExport_Model_Api extends Mage_Api_Model_Resource_Abstract
{
    /**
     * Returns version of the installed magento
     * @return String
     */

    public function foo() {
        return true;
    }
}
?>

/app/code/local/Namespace/ImportExport/Model/API/V2.php

<?php
class Namespace_ImportExport_Model_Api_V2 extends Namespace_ImportExport_Model_Api
{
    public function foo() {
        return true;
    }
}
?>

我打电话,就像这样......

$fclient = new SoapClient($config['from']['soap_url']);
$fsession = $fclient->login($config['from']['username'], $config['from']['api_key']);
var_dump($fclient->importexportFoo($fsession));

据我所知,这是让我的自定义api V2模块工作的必需品。那么我可能做错了什么呢?

我收到此错误

Function ("importexportFoo") is not a valid method for this service

1 个答案:

答案 0 :(得分:1)

我刚遇到过这样的问题。

进行API调用时检查$config['from']['soap_url']的值。如果值看起来像http://example.com/api/soap?wsdl,那么您仍在调用V1。将其更新为http://example.com/api/v2_soap/?wsdl