-1

如何在 magento 中创建自定义 Api 和 Api2 并授予这些 Api 和 Api2 权限?

你能举个例子吗?

提前致谢。

4

1 回答 1

1

请看我下面的自定义代码,可能对你有帮助,

api.xml

<config>
    <modules>
        <Agentgallery>
            <version>0.1.0</version>
        </Agentgallery>
    </modules>
    <api>
        <resources>
            <agentgallery translate="title" module="agentgallery">
                <model>agentgallery/api</model>
                <title>Tax Rule Api</title>
                <acl>agentgallery</acl>
                <methods>
                    <gettaxrule translate="title" module="agentgallery">
                        <title>Retrieve tax rule data</title>
                        <acl>agentgallery/gettaxrule</acl>
                    </gettaxrule>                    
                </methods>              
            </agentgallery>
        </resources>
        <acl>
            <resources>
                <agentgallery translate="title" module="agentgallery">
                    <title>Tax Rule</title>
                    <gettaxrule translate="title" module="agentgallery">
                        <title>Get tax rule</title>
                    </gettaxrule>                    
                </agentgallery>
                <all>
                </all>
            </resources>
        </acl>
    </api>
</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}}">

    <message name="agentgalleryGettaxruleRequest">
        <part name="sessionId" type="xsd:string" />
        <part name="arg" type="xsd:string" />
    </message>    
    <message name="agentgalleryGettaxruleResponse">
        <part name="result" type="xsd:string" />
    </message>   
    <portType name="{{var wsdl.handler}}PortType">
        <operation name="agentgalleryGettaxrule">
            <documentation>Test Method</documentation>
            <input message="typens:agentgalleryGettaxruleRequest" />
            <output message="typens:agentgalleryGettaxruleResponse" />
        </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="agentgalleryGettaxrule">
            <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>

模块模型文件夹中的 Api.php

<?php
class Namespace_Modulename_Model_Api extends Mage_Api_Model_Resource_Abstract
{

     public function gettaxrule($customerTaxClass,$productTaxClass)
     {                        
        $result = Mage::getResourceModel('tax/calculation')->getRatesForWebservices($customerTaxClass,$productTaxClass);

        //here you can paste your code whatever you need instead of $result variable

        return $result;
     }

}
?>

model/Objectmodel/api/ 文件夹内的 V2.php 文件

<?php
class Namespace_Modulename_Model_Objectmodel_Api_V2 extends Companyname_Modulename_Model_Objectmodel_Api
{    

}
?>

在你可以像下面这样调用你的方法之后在这里你在调用这样的方法之后创建 api 对象

$result = $checkData->proxyObj()->call($sessionId, 'agentgallery.gettaxrule',array($customerTaxClass,$productTaxClass));  

这里的“agentgallery.gettaxrule”是自定义方法。

尝试这个

于 2013-09-24T06:36:17.153 回答