首先 SOAP 简介: http://baike.baidu.com/view/1695890.htm?fromtitle=SOAP

然后简单介绍下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

创建目录:

 \app\code\local\Jinko\Jdata\helper
\app\code\local\Jinko\Jdata\etc
\app\code\local\Jinko\Jdata\model

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

 <!--
此文件为当前模块的配置文件
-->
<config>
<modules>
<Jinko_Jdata><!--此标签名就是模块名-->
<version>0.1.0</version><!--模块版本号-->
</Jinko_Jdata>
</modules>
<frontend><!--前端-->
<routers><!--路由-->
<jdata><!--名为为jdata的路由-->
<use>standard</use>
<args>
<module>Jinko_Jdata</module><!--对应模块-->
<frontName>jdata</frontName><!--前端url路径使用名称-->
</args>
</jdata>
</routers>
</frontend>
<global><!--全局配置-->
<helpers><!--定义辅助类工具-->
<jdata><!--定义名称为jdata的一个辅助类-->
<class>Jinko_Jdata_Helper</class><!--此辅助工具对应的php类名-->
</jdata>
</helpers>
<models><!--定义模型-->
<jdata><!--可以把它想象成是一个文件夹名字-->
<rewrite><!--重写model名对应的类名-->
<data_api>Jinko_Jdata_Model_Data_Api</data_api><!--名称为data_api的model对应的类名-->
</rewrite>
</jdata>
</models>
</global>
</config>

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

\app\etc\modules\Jinko.xml

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

 <config>
<modules>
<Jinko_Jdata><!--模块名-->
<active>true</active><!--激活-->
<codePool>local</codePool><!--代码池-->
</Jinko_Jdata>
</modules>
</config>

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

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

输入如下配置代码:

 <config>
<api><!--api 配置-->
<resources><!--资源列表-->
<jinkoapi_data translate="title" module="jdata"><!--api模块名称, 此名称用于soap client调用-->
<model>jdata/data_api</model><!--此api对应的处理model-->
<methods><!--此api模块有哪些调用的方法-->
<get translate="title" module="jdata"><!--get方法, 此方法名用于soap client调用-->
<acl>jinkoapi/data/get</acl><!--对应的权限是哪一项, 对应下面acl标签的设置-->
<method>getData</method><!--显示指定使用php类中的方法, 如不使用则默认为get(标签名, 注意的是, 部分php关键字不能作为php类的方法, 如list, array)-->
</get>
<set translate="title" module="jdata"><!--同理-->
<acl>jinkoapi/data/set</acl>
<method>setData</method>
</set>
</methods>
<faults module="jdata"><!--定义错误代码-->
<set_error><!--错误代码名称, 用于model类中使用指定返回此错误-->
<code>1001</code><!--错误代码-->
<message>set error!</message><!--错误消息-->
</set_error>
<no_access><!--同理-->
<code>1000</code>
<message>No access!</message>
</no_access>
</faults>
</jinkoapi_data>
</resources>
<acl><!--此acl对应于admin页面role管理页面(用户组管理页面)中的权限复选框-->
<resources>
<jinkoapi translate="title" module="jdata"><!--此标签名对应于上面acl标签的值-->
<title>JinkoApi</title><!--复选框名称-->
<data translate="title" module="jdata">
<title>Data</title><!--复选框名称, 此复选框上一级为jinkoapi-->
<get translate="title" module="jdata">
<title>Get Data</title><!--复选框名称, 此复选框上一级为data-->
</get>
<set translate="title" module="jdata"><!--同理-->
<title>Set Data</title>
</set>
</data>
</jinkoapi>
</resources>
</acl>
</api>
</config>

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

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

 <?php
class Jinko_Jdata_Helper_Data extends Mage_Core_Helper_Abstract
{ }

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

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

 \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文件代码如下:

 <?php
/**
* Created by PhpStorm.
* User: jingke.wu
* Date: 2016/3/15
* Time: 下午 05:25
*/
class Jinko_Jdata_Model_Data_Api extends Mage_Api_Model_Resource_Abstract
{
public function getData()
{
@session_start();
return array($_SESSION['jinko']);
} public function setData($data)
{
@session_start(); if($data == 'qqq') {
$this->_fault('no_access');//对应api.xml的faults里的no_access标签
} $_SESSION['jinko'] = array($data);
return $this->getData();
}
}

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

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

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

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

 <?php
$client = new SoapClient('http://migb2c.com/api/soap?wsdl');
$session = $client->login('jinko', '123456');
$result = $client->call($session, 'jinkoapi_data.set', 'qqq');
var_dump ($result); ?>

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

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

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

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

接下来的测试代码如下:

 <?php
$client = new SoapClient('http://migb2c.com/api/soap?wsdl');
$session = $client->login('jinko', '123456');
$result = $client->call($session, 'jinkoapi_data.set', 'asasdasd');
var_dump ($result); ?>

这次的结果截图如下:

正确返回数值。

ok, 我们自己一个api然后测试调用。magento其实已经定义了很多个api可以直接供我们使用, 其调用方法也是一样的。具体有哪些模块方法可以现成调用呢?

如下:

                     Catalog
Catalog Category
catalog_category.assignedProducts
catalog_category.assignProduct
catalog_category.create
catalog_category.currentStore
catalog_category.delete
catalog_category.info
catalog_category.level
catalog_category.move
catalog_category.removeProduct
catalog_category.tree
catalog_category.update
catalog_category.updateProduct Catalog Category Attributes
catalog_category_attribute.currentStore
catalog_category_attribute.list
catalog_category_attribute.options Catalog Product
catalog_product.create
catalog_product.currentStore
catalog_product.delete
catalog_product.getSpecialPrice
catalog_product.info
catalog_product.list
catalog_product.listOfAdditionalAttributes
catalog_product.setSpecialPrice
catalog_product.update Catalog Product Attribute
product_attribute.addOption
product_attribute.create
product_attribute.currentStore
product_attribute.info
product_attribute.list
product_attribute.options
product_attribute.remove
product_attribute.removeOption
product_attribute.types
product_attribute.update Catalog Product AttributeMedia
catalog_product_attribute_media.create
catalog_product_attribute_media.currentStore
catalog_product_attribute_media.info
catalog_product_attribute_media.list
catalog_product_attribute_media.remove
catalog_product_attribute_media.types
catalog_product_attribute_media.update Catalog Product Attribute Set
product_attribute_set.attributeAdd
product_attribute_set.attributeRemove
product_attribute_set.create
product_attribute_set.groupAdd
product_attribute_set.groupRemove
product_attribute_set.groupRename
product_attribute_set.list
product_attribute_set.remove Catalog Product CustomOption
product_custom_option.add
product_custom_option.info
product_custom_option.list
product_custom_option.remove
product_custom_option.types
product_custom_option.update Catalog Product Custom Option Value
product_custom_option_value.add
product_custom_option_value.info
product_custom_option_value.list
product_custom_option_value.remove
product_custom_option_value.update Catalog Product Downloadable Link
product_downloadable_link.add
product_downloadable_link.list
product_downloadable_link.remove Catalog Product Link
catalog_product_link.assign
catalog_product_link.attributes
catalog_product_link.list
catalog_product_link.remove
catalog_product_link.types
catalog_product_link.update Catalog Product Tag
product_tag.add
product_tag.info
product_tag.list
product_tag.remove
product_tag.update Catalog Product Tier Price
catalog_product_attribute_tier_price.info
catalog_product_attribute_tier_price.update Catalog Product Types
catalog_product_type.list Catalog Inventory
cataloginventory_stock_item.list
cataloginventory_stock_item.update Checkout
Cart
cart.create
cart.info
cart.license
cart.order
cart.totals Cart Coupon
cart_coupon.add
cart_coupon.remove Cart Customer
cart_customer.addresses
cart_customer.set Cart Payment
cart_payment.list
cart_payment.method Cart Product
cart_product.add
cart_product.list
cart_product.moveToCustomerQuote
cart_product.remove
cart_product.update Cart Shipping
cart_shipping.list
cart_shipping.method Customer
customer_group
customer.create
customer.delete
customer.info
customer.list
customer.update Customer Address
customer_address.create
customer_address.delete
customer_address.info
customer_address.list
customer_address.update Directory
directory_country.list
directory_region.list Sales
Sales Order
sales_order.addComment
sales_order.cancel
sales_order.hold
sales_order.info
sales_order.list
sales_order.unhold Sales Order Credit Memo
sales_order_creditmemo.addComment
sales_order_creditmemo.cancel
sales_order_creditmemo.create
sales_order_creditmemo.info
sales_order_creditmemo.list Sales Order Invoice
sales_order_invoice.addComment
sales_order_invoice.cancel
sales_order_invoice.capture
sales_order_invoice.create
sales_order_invoice.info
sales_order_invoice.list Sales Order Shipment
sales_order_shipment.addComment
sales_order_shipment.addTrack
sales_order_shipment.create
sales_order_shipment.getCarriers
sales_order_shipment.info
sales_order_shipment.list
sales_order_shipment.removeTrack Enterprise Customer Balance Customer Balance
storecredit.balance
storecredit.history Shopping Cart Customer Balance
storecredit_quote.removeAmount
storecredit_quote.setAmount Enterprise Gift Card Cart Gift Card
cart_giftcard.add
cart_giftcard.list
cart_giftcard.remove Gift Card Account
giftcard_account.create
giftcard_account.info
giftcard_account.list
giftcard_account.remove
giftcard_account.update Gift Card Customer
giftcard_customer.info
giftcard_customer.redeem Enterprise Gift Message
giftmessage.setForQuote
giftmessage.setForQuoteItem
giftmessage.setForQuoteProduct Miscellaneous
magento.info
store.info
store.list

具体作用及使用方法可以参见官网文档:http://devdocs.magento.com/guides/m1x/api/soap/introduction.html

Magento WebServices SOAP API 创建和使用的更多相关文章

  1. 使用Azure REST API创建虚拟机

    Hollis Yao, Shihao Rong  使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...

  2. salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)

    此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...

  3. Magento代码之订单创建流程

    Magento代码之订单创建流程         直接看代码吧.下面的代码是如何通过程序创建一个完美订单.        <?php        require_once 'app/Mage. ...

  4. Problem About Salesforce SOAP API 32.0 In .Net Project

    最近在集成项目项目中遇到一个问题:在用最新版本(API 32.0)Enterprise WSDL在.Net 中做集成时,初始化SforceService 时会初始化类错误.这算是Salesforce ...

  5. 使用hbase的api创建表时出现的异常

    /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...

  6. (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)

    (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0) 更新:ios4.1现在已经将这个做到SDK了.你可以设置键盘类型为UIKeyboardTypeDecimal ...

  7. JavaEE Tutorials (11) - 使用Criteria API创建查询

    11.1Criteria和Metamodel API概述16811.2使用Metamodel API为实体类建模170 11.2.1使用元模型类17011.3使用Criteria API和Metamo ...

  8. 使用Win32 API创建不规则形状&带透明色的窗口

    前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...

  9. Revit通过API创建共享参数

    Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个. ...

随机推荐

  1. 使用Java管理Azure(1):基础配置

    Azure针对Java开发人员提供了非常丰富的开发库,开发工具,和相关插件,让你通过Java对Azure进行服务管理和开发,本文第一步先介绍如何快速的配置Java开发工具,主要针对目前比较流行的Ecl ...

  2. 局域网内IP冲突怎么办

      对于在Internet和Intranet网络上,使用TCP/IP协议时每台主机必须具有独立的IP地址,有了IP地址的主机才能与网络上的其它主机进行通讯.但IP地址冲突会造成网络客户不能正常工作,只 ...

  3. Android网络编程之Http通信

    Android中提供的HttpURLConnection和HttpClient接口可以用来开发HTTP程序.以下是本人在学习中的总结与归纳.1. HttpURLConnection接口    首先需要 ...

  4. delete 多表删除的使用(连表删除)

    delete 多表删除的使用     1.从数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE  ...

  5. INNO SETUP 获得命令行参数

    原文 http://www.cnblogs.com/ahuo/archive/2009/07/30/1534998.html );           Result := CmdLine;       ...

  6. Silverlight中的拖拽实现的图片上传

    原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...

  7. Linux中Samba详细安装

    为了实现Windows主机与Linux服务器之间的资源共享,Linux操作系统提供了Samba服务,Samba服务为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互 ...

  8. Node.js 参考学习地址

    前段时间研究过Node.js 自从由于笔记本硬盘崩了之后就很少在家里搞程序了,但是很想学习之,只因最近在努力学习英文.技术之外的事也需要做好,我们毕竟不是为了技术而生,技术是我们生存的一门得力技能,唯 ...

  9. Windows去掉桌面SVN文件或文件夹问号

    将版本库 的内容检出 到桌面,后才发现桌面上的文件 都变成了问号,本来也以为没有多大问题,删除 .svn 即可,可是删除所有的.svn后,桌面上还是显示问号,刷新了很多次,还重启电脑 了,问号也没有消 ...

  10. 杭电oj 3361

    Tips:字符在计算机中都是以ASCII码形式保存,直接以char形式输出ASCII码即可. #include<stdio.h> int main() { int T; scanf(&qu ...