Magento WebServices SOAP API 创建和使用

然后简单介绍下Magento API。Magento API干啥用?我们可以通过该API进行App开发, 第三方对接等需要用到网站功能的第三方程序, 都可以使用Magento Api方便地交互。这里要介绍的就是SOAP API。

 

访问权限:

api的访问权限是通过后台设置配置role和user来决定的。也就是说, 对应一个api能否访问,看当前登录用户(WebServices 用户, 不是普通注册用户)是否有权访问。

配置方法如下:

在magento的管理后台 system>web services>soap….(如图)

role为角色或者说是用户组管理, 每个用户组可以设置不同的权限。users为对应的web services用户管理,user的用户名和密码用于登录web services。可以为不同用户划分到不同的用户组。在用户组界面中可以管理web services api的访问权限, 如下图:

 

我现在创建了以个用户组为myTest的组和一个用户名为jinko, 密码为123456的用户。此用户在调用web services的时候将会用到。

 

 

下面就是创建一个自己的web services soap API。

首先创建一个自己的模块(如果有自己的模块可以不用在创建),模块包名为Jinko, 模块名为Jinko_Test

创建目录:

1 \app\code\local\Jinko\Jdata\helper
2 \app\code\local\Jinko\Jdata\etc
3 \app\code\local\Jinko\Jdata\model

在etc目录中新建一个config.xml文件输入如下代码:

复制代码
 1 <!--
 2  此文件为当前模块的配置文件
 3 -->
 4 <config>
 5     <modules>
 6         <Jinko_Jdata><!--此标签名就是模块名-->
 7             <version>0.1.0</version><!--模块版本号-->
 8         </Jinko_Jdata>
 9     </modules>
10     <frontend><!--前端-->
11         <routers><!--路由-->
12             <jdata><!--名为为jdata的路由-->
13                 <use>standard</use>
14                 <args>
15                     <module>Jinko_Jdata</module><!--对应模块-->
16                     <frontName>jdata</frontName><!--前端url路径使用名称-->
17                 </args>
18             </jdata>
19         </routers>
20     </frontend>
21     <global><!--全局配置-->
22         <helpers><!--定义辅助类工具-->
23             <jdata><!--定义名称为jdata的一个辅助类-->
24                 <class>Jinko_Jdata_Helper</class><!--此辅助工具对应的php类名-->
25             </jdata>
26         </helpers>
27         <models><!--定义模型-->
28             <jdata><!--可以把它想象成是一个文件夹名字-->
29                 <rewrite><!--重写model名对应的类名-->
30                     <data_api>Jinko_Jdata_Model_Data_Api</data_api><!--名称为data_api的model对应的类名-->
31                 </rewrite>
32             </jdata>
33         </models>
34     </global>
35 </config>
复制代码

然后新建一个如下路径的xml文件:

\app\etc\modules\Jinko.xml

写入如下代码, 告诉框架我做了个这样一个很屌的模块:

复制代码
1 <config>
2     <modules>
3         <Jinko_Jdata><!--模块名-->
4             <active>true</active><!--激活-->
5             <codePool>local</codePool><!--代码池-->
6         </Jinko_Jdata>
7     </modules>
8 </config>
复制代码

这时候这个模块就建立好了。然后就是添加api配置,在如下新建一个如下路径的xml文件:

1 \app\code\local\Jinko\Jdata\etc\api.xml

输入如下配置代码:

复制代码
 1 <config>
 2     <api><!--api 配置-->
 3         <resources><!--资源列表-->
 4             <jinkoapi_data translate="title" module="jdata"><!--api模块名称, 此名称用于soap client调用-->
 5                 <model>jdata/data_api</model><!--此api对应的处理model-->
 6                 <methods><!--此api模块有哪些调用的方法-->
 7                     <get translate="title" module="jdata"><!--get方法, 此方法名用于soap client调用-->
 8                         <acl>jinkoapi/data/get</acl><!--对应的权限是哪一项, 对应下面acl标签的设置-->
 9                         <method>getData</method><!--显示指定使用php类中的方法, 如不使用则默认为get(标签名, 注意的是, 部分php关键字不能作为php类的方法, 如list, array)-->
10                     </get>
11                     <set translate="title" module="jdata"><!--同理-->
12                         <acl>jinkoapi/data/set</acl>
13                         <method>setData</method>
14                     </set>
15                 </methods>
16                 <faults module="jdata"><!--定义错误代码-->
17                     <set_error><!--错误代码名称, 用于model类中使用指定返回此错误-->
18                         <code>1001</code><!--错误代码-->
19                         <message>set error!</message><!--错误消息-->
20                     </set_error>
21                     <no_access><!--同理-->
22                         <code>1000</code>
23                         <message>No access!</message>
24                     </no_access>
25                 </faults>
26             </jinkoapi_data>
27         </resources>
28         <acl><!--此acl对应于admin页面role管理页面(用户组管理页面)中的权限复选框-->
29             <resources>
30                 <jinkoapi translate="title" module="jdata"><!--此标签名对应于上面acl标签的值-->
31                     <title>JinkoApi</title><!--复选框名称-->
32                     <data translate="title" module="jdata">
33                         <title>Data</title><!--复选框名称, 此复选框上一级为jinkoapi-->
34                         <get translate="title" module="jdata">
35                             <title>Get Data</title><!--复选框名称, 此复选框上一级为data-->
36                         </get>
37                         <set translate="title" module="jdata"><!--同理-->
38                             <title>Set Data</title>
39                         </set>
40                     </data>
41                 </jinkoapi>
42             </resources>
43         </acl>
44     </api>
45 </config>
复制代码

上面配置文件中一些参数的对应关系如下图:

 

现在api的配置已经写好了, 接下来就是实现这个api, 返回我们自己的东西。上面多了一个没有提到的东西, 就是helper,在此处不需要用到helper, 但是如果没有helper文件夹和默认的helper类, 在进入admin后台页面的web services role管理页面的时候会报错, 找不到类。这个Jinko_Jdata_helper类也是一个空类, 代码如下:

1 <?php
2 class Jinko_Jdata_Helper_Data extends Mage_Core_Helper_Abstract
3 {
4 
5 }

还有一点就是, 上图中还有一个文件时IndexController.php,这个文件是前端的一个控制器。跟API没有关系。

 

接下来就是要实现api.php类,为什么这个文件的目录路径是这样的?:

1 \app\code\local\Jinko\Jdata\model\data\api.php

因为我们再congif.xml中指定的data_api模型的类名为Jinko_Jdata_Model_Data_Api。magento是根据类名来找文件的,则文件对应目录为jinko/jdata/model/data/api.php。这获取是约定的一个规则吧。

 

api.php文件代码如下:

复制代码
 1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: jingke.wu
 5  * Date: 2016/3/15
 6  * Time: 下午 05:25
 7  */
 8 class Jinko_Jdata_Model_Data_Api extends Mage_Api_Model_Resource_Abstract
 9 {
10     public function getData()
11     {
12         @session_start();
13         return array($_SESSION['jinko']);
14     }
15 
16     public function setData($data)
17     {
18         @session_start();
19 
20         if($data == 'qqq') {
21             $this->_fault('no_access');//对应api.xml的faults里的no_access标签
22         }
23 
24         $_SESSION['jinko'] = array($data);
25         return $this->getData();
26     }
27 }
复制代码

上面代码中, 主要来测试set方法, 在set方法(这里说的set方法是只web services调用时候的set, 对应上面类中的setData方法),传递的参数如果是字符串‘qqq’, 则返回一个没有访问权限的错误, 当然这个错误是我们自己编写的。如果不是qqq则返回一个数组, 并将参数打包进去。

 

做到这一步, 还有一步重要的就是在后台webservices role配置那里,给新添加的api勾上权限, 如下图:

 

好了, 现在已经基本就绪了。我们可以编写测试代码来测试了。

 

测试代码随便写个1.php运行一下就可以看到结果了,测试代码1调用jinkoapi_data.set方法:

复制代码
1 <?php
2 $client = new SoapClient('http://migb2c.com/api/soap?wsdl');
3 $session = $client->login('jinko', '123456');
4 $result = $client->call($session, 'jinkoapi_data.set', 'qqq');
5 var_dump ($result);
6 
7 ?>
复制代码

注意代码的第三行, 调用soap的login方法的时候, 需要传递一个用户名和密码, 这个用户名和密码就是我一开始说的,在magento后台web services user中配置的, 而不是通过magento注册页面注册的用户, 也不是后台管理员admin的用户。然后调用call方法调用具体的模块方法。

call方法的第一个参数是一个session_id, 也是login方法调用后的返回值. 第二个参数是对应web services的模块和方法, jinkoapi是我们再api.xml中定义的, set也是。·qqq·是传递的参数

这个传递的参数是字符串的qqq, 那么根据我们写的程序其返回结果会是一个自定义的错误,如下图:

从上图可以看到, 错误代码是1000, 错误消息是No access! 这些都是我们自己定义的。

 

接下来的测试代码如下:

复制代码
1 <?php
2 $client = new SoapClient('http://migb2c.com/api/soap?wsdl');
3 $session = $client->login('jinko', '123456');
4 $result = $client->call($session, 'jinkoapi_data.set', 'asasdasd');
5 var_dump ($result);
6 
7 ?>
复制代码

这次的结果截图如下:

正确返回数值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值