Magento API示例

时间:2011-07-14 15:58:19

标签: api magento

我正在寻找一个支持Magento API的模块的工作示例。我该如何定义它,为它编写代码并调用它?

1 个答案:

答案 0 :(得分:29)

一个工作配置(在app / code / local / ModuleName / etc /中。我把我写成了api.xml):

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <ModuleName>
            <version>0.1.0</version>
        </ModuleName>
    </modules>
    <api>
        <resources>
            <customer translate="title" module="xyz">
                <model>ModuleName_Model_Api</model>
                <title>Customer Resource</title>
                <acl>customer</acl>
                <methods>
                    <info translate="title" module="xyz">
                        <title>Retrieve customer data</title>
                        <acl>customer/info</acl>
                        <method>info</method>
                    </info>
                </methods>
                <faults module="xyz">                   
                </faults>
            </customer>
        </resources>
        <acl>
            <resources>
                <customer translate="title" module="xyz">
                    <title>Customers</title>
                    <info translate="title" module="xyz">
                        <title>Get Info Test</title>
                    </info>
                </customer>
                <all>
                </all>
            </resources>
        </acl>
    </api>
</config>

PHP代码(在app / code / local / ModuleName / Model / Api.php中):

class ModuleName_Model_Api extends Mage_Api_Model_Resource_Abstract
{
    function info()
    {
        return 'xxx';
    }
}

实际调用SOAP接口的PHP代码:

$mageUrl    = 'http:/local.magecomm/api/?wsdl'; 
$mageUser   = 'soaptest'; 
$mageApiKey = 'apitest'; 

$soap = new SoapClient($mageUrl); 

$sessionID = $soap->login($mageUser, $mageApiKey);

var_dump($soap->call($sessionID, 'customer.info', array()));

运行所述脚本的结果:

C:/Temp>php magesoap.php
string(3) "xxx"

有些说明:

o错误:“无效的api路径。”

  • 这意味着Magento找不到该模块。

o错误:“资源路径不可调用。”

  • 这意味着Magento无法调用模块中的方法。

  • 您可以使用system.log文件对其进行调试。它将显示一个或多个错误,指出它无法从计算出的文件路径中自动加载所请求的类。

      

    2011-04-13T15:15:24 + 00:00调试(7):include(Mage / Customer / Model / Api.php)[function.include]:无法打开流:没有这样的文件或目录C: /Development/Projects/MagentoCommercial/lib/Varien/Autoload.php

         

    2011-04-13T15:15:24 + 00:00调试(7):include()[function.include]:无法打开'Mage / Customer / Model / Api.php'(include_path ='C) :/开发/项目/ MagentoCommercial /应用/代码/地方; C:/开发/项目/ MagentoCommercial /应用/代码/社区; C:/开发/项目/ MagentoCommercial /应用/代码/核心; C:/开发/项目/ MagentoCommercial / lib中; C:/开发/库; C:/开发/库/标准/ _Pear')C:/Development/Projects/MagentoCommercial/lib/Varien/Autoload.php

o上面的module-config XML将此SOAP接口链接到“Customers”组下名为“Get Info Test”的API权限中的新项目。然后,它将可用于允许或拒绝特定的API用户/角色。

o module-config XML中/ config / api / resources / customer / methods / info下的值是应该绑定到SOAP资源名称的方法的内部方法名称。如果它们是相同的,那么你可以省略它。

o / config / api / resources / customer下的值('ModuleName_Model_Api')是这里的完整类名,因为它显然是指我的类,它不是Mage的一部分。如果你试图在Mage中调用现有的类,你可以使用简写符号(xxx / yyy,xxx / yyy_zzz等)。

o仅在module-config的ACL部分中,“module”属性(&lt; ... module =“”&gt;)的值似乎很重要。尽管如此,确保在任何地方都正确设置(大小写无关紧要)。可能他们只是没有实现它的主流,然而,忽略它只会在以后引起你的问题。

达斯汀奥普雷亚