最新消息:Excel无乱码转CSV,由于工作原因很少更新博客和回复大家的评论,非常抱歉。

magento中如何创建自己的api

magento本身提供了很好的webservice支持,举例子来说,在Mage_Sales_Model_Order_Api中有items,info,addcomment,hold,unhold,cancel等api方法.

magento/

|– app/

|– code/

|   |– core/

|       |– Mage/

|           |– Sales/

|               |– etc/

|               |    |– api.xml

|               |    |– config.xml

|               |– Model/

|                    |– Order/

|                         |– Api.php

这些方法定义在api.xml中

<config>

<api>

<resources>

<sales_order translate=”title” module=”sales”>

//这里的sales_order是表明这个标签的名字,任何名字都可以但需要是唯一的,这个名字在后来调用这个接口时将会被用到,

$salesinfo = $proxy->call($sessionId, ‘sales_order.info’, 100012370);这里面的sales_order就是这个标签的名字。Module指的就是这个接口属于哪一个模块的,显然这个接口是属于 sales模块的。

<model>sales/order_api</model>

//model说明了到哪里去找这个api接口方法。Sales在config.xml中的model标签里设置了它的class,所以到时候会用它的class+_Order_Api作为class名。具体的为Mage_Sales_Model_Order_Api

<title>Order API</title>

<acl>sales/order</acl>

//这里指明了该接口的acl配置路径,这些api模块需要设置acl,否则不能访问。

<methods>

//methods标签里列出了所有这个sales_order接口的方法

<list translate=”title” module=”sales”>

<title>Retrieve list of orders by filters</title>

<method>items</method>

<acl>sales/order/info</acl>

</list>

//list是方法名,因为list在php中是关键字,所以这里改用另外一个方法items,当要改用某个方法的时候用<method>标签,接下来要指明这个方法在acl中的配置路径。

<info translate=”title” module=”sales”>

<title>Retrieve order information</title>

<acl>sales/order/info</acl>

</info>

</methods>

//faults标签里列出了所有的可能出现的错误类型和提示信息,在设置<code></code>标签里面的值的时候不能够有空白符。

<faults module=”sales”>

<not_exists>

<code>100</code>

<message>Requested order not exists.</message>

</not_exists>

<filters_invalid>

<code>101</code>

<message>Invalid filters given. Details in error message.</message>

</filters_invalid>

<data_invalid>

<code>102</code>

<message>Invalid data given. Details in error message.</message>

</data_invalid>

<status_not_changed>

<code>103</code>

<message>Order status not changed. Details in error message.</message>

</status_not_changed>

</faults>

</sales_order>

下面是api.xml中的acl设置,

<acl>

<resources>

<sales translate=”title” module=”sales”>

//这里的sales和上面api设置中的<acl>sales/order</acl>中的sales相同,说明sales_order这个接口的acl设置应该到这里的sales下面的order标签里面找。

<title>Sales</title>

//这里的title会在后台的role resource里面的acl列表里面显示。

<sort_order>2</sort_order>

<order translate=”title” module=”sales”>

<title>Order</title>

<info translate=”title” module=”sales”>

//根据上面api设置中的<acl>sales/order/info</acl>应该可以找到这里来:)

<title>Retrieve orders info</title>

</info>

</order>

</sales>

</resources>

</acl>

Api.xml中的设置是最重要的,只有api.xml中的信息设置正确了,我们才能够使用api接口。另外还有一件事情是不可少的就是,要在 magento的后台system->webservice->user创建你的用户名,api key。然后再role中选择某个role resource,如果没有,到system->webservice->roles去创建。在 system->webservice->roles->roles resources中选择权限,下面我们将创建自己的api,当创建好了以后,也会在这里显示,不要忘记到这里来选择它,以免你测试的时候出现 access denied错误。

我期望能够创建一个sales order自定义的api接口,用来获取一些特定订单信息,并做相关处理…

(1)创建模块文件夹目录

magento/

|– app/

|– code/

|   |– local/

|       |– Packagename/

|           |– Appsales/

|               |– etc/

|               |    |– api.xml

|               |    |– config.xml

|               |– Model/

|                    |– Order/

|                         |– Api.php

|– modules/

|– etc/

|– Packagename_Appsales.xml

(1)OK, 让我们告诉magento我写了个新的模块。magento/app/etc/modules/Packagename_Appsales.xml :

<?xml version=”1.0″?>

<config>

<modules>

<Packagename_Appsales>

<active>true</active>

<codePool>local</codePool>

</Packagename_Appsales>

</modules>

</config>

(2)Api.xml的设置

<?xml version=”1.0″?>

<config>

<api>

<resources>

<testsales translate=”title” module=”Appsales”>

<model>Appsales/order_api</model>

<title>Order API</title>

<acl>testsales/order</acl>

<methods>

<info translate=”title” module=”Appsales”>

<title>Retrieve order information test</title>

<acl>testsales/order/info</acl>

</info>

</methods>

<faults module=” Appsales “>

<not_exists>

<code>100</code>

<message>Requested order not exists.</message>

</not_exists>

<filters_invalid>

<code>101</code>

<message>Invalid filters given. Details in error message.</message>

</filters_invalid>

<data_invalid>

<code>102</code>

<message>Invalid data given. Details in error message.</message>

</data_invalid>

<status_not_changed>

<code>103</code>

<message>Order status not changed. Details in error message.</message>

</status_not_changed>

</faults>

</testsales >

</resources>

<acl>

<resources>

<testsales translate=”title” module=”Appsales”>

<title>Test Sales</title>

<sort_order>2</sort_order>

<order translate=”title” module=”Appsales”>

<title>Order</title>

<info translate=”title” module=”Appsales”>

<title>Retrieve orders info</title>

</info>

</order>

</testsales >

</resources>

</acl>

</api>

</config>

(3)Config.xml中的设置:

<?xml version=”1.0″?>

<config>

<modules>

<Packagename_Appsales >

<version>0.1.0</version>

</Packagename_Appsales >

</modules>

<global>

<helpers>

<Appsales>

<class>Packagename_Appsales_Helper</class>

</Appsales>

</helpers>

<models>

<Appsales>

<rewrite>

<order_api>Packagename_Appsales_Model_Order_Api</order_api>

</rewrite>

</Appsales >

</models>

</global>

</config>

(4)我的api接口:

<?php

class Packagename_Appsales_Model_Order_Api extends Mage_Sales_Model_Order_Api {

public function info($orderIncrementId) {

$result[‘payment’] =’ hello world’;

return $result;

}

}

?>

(5)如果没有helper文件夹的话可能在打开magento后台webservice的roles resources会出现问题,所以还是增加了helper文件夹和data.php

<?php

class Packagename_Appsales_Helper_Data extends Mage_Sales_Helper_Data

{

}

(6)通过测试文件测试一下:


要注意call方法中的testsales.info,点号前面的是接口的名字,点号后面是接口方法。接口的名字在这里设置

<api>

<resources>

<testsales  translate=”title” module=”Appsales”>

源文:http://jiyongcheng.com/2011/02/562.html

欢迎爱好者来拍板

转载请注明:嗨酷哥,有你更酷! » magento中如何创建自己的api

与本文相关文章

发表我的评论

取消评论
表情 插代码

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项

网友评论1

  1. (6)通过测试文件测试一下:
    亲,上面说的测试文件是哪个样的。让俺看看呗。发送到我邮箱lys198808@163.com

    haohao1232014-05-15 16:57 回复