我正在寻找一个支持Magento API的模块的工作示例。我该如何定义它,为它编写代码并调用它?
答案 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路径。”
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;)的值似乎很重要。尽管如此,确保在任何地方都正确设置(大小写无关紧要)。可能他们只是没有实现它的主流,然而,忽略它只会在以后引起你的问题。
达斯汀奥普雷亚