Magento WebServices SOAP API 创建和使用
首先 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 创建和使用的更多相关文章
- 使用Azure REST API创建虚拟机
Hollis Yao, Shihao Rong 使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...
- salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)
此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...
- Magento代码之订单创建流程
Magento代码之订单创建流程 直接看代码吧.下面的代码是如何通过程序创建一个完美订单. <?php require_once 'app/Mage. ...
- Problem About Salesforce SOAP API 32.0 In .Net Project
最近在集成项目项目中遇到一个问题:在用最新版本(API 32.0)Enterprise WSDL在.Net 中做集成时,初始化SforceService 时会初始化类错误.这算是Salesforce ...
- 使用hbase的api创建表时出现的异常
/usr/lib/jvm/java-7-openjdk-amd64/bin/java -Didea.launcher.port=7538 -Didea.launcher.bin.path=/usr/l ...
- (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)
(译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0) 更新:ios4.1现在已经将这个做到SDK了.你可以设置键盘类型为UIKeyboardTypeDecimal ...
- JavaEE Tutorials (11) - 使用Criteria API创建查询
11.1Criteria和Metamodel API概述16811.2使用Metamodel API为实体类建模170 11.2.1使用元模型类17011.3使用Criteria API和Metamo ...
- 使用Win32 API创建不规则形状&带透明色的窗口
前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧.所以本人决定好好研究下这个问题.经过一下午的摸索,基本 ...
- Revit通过API创建共享参数
Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个. ...
随机推荐
- 从setTimeout到浏览器线程机制
看高性能javascipt 这本书时,看到这么一句话: Putting scripts at the top of the page in this way typically leads to a ...
- Firebug Command Line
http://michaelsync.net/2007/09/15/firebug-tutorial-commandline-api
- listvew加载更多
http://bbs.51cto.com/thread-968277-1.html 又是新的一周的开始,上午自己写了上拉加载更多数据的demo,嘿嘿这里和大家分享. android开发中,list ...
- 走出MFC子类化的迷宫
走出MFC子类化的迷宫 KEY WORDS:子类化 SUBCLASSWINDOW MFC消息机制 许多Windows程序员都是跳过SDK直接进行RAD开发工具[或VC,我想VC应不属于RAD]的学习 ...
- Node.js log1: ERR can not find module express
1.win7下创建项目中提示输入的命令:cd project&&npm install 安装失败 输入上面提示的命令,预期结果:自动安装了依赖 ejs 和 express,失败提 ...
- Linux常用C函数---内存控制篇
函数讲解部分参考http://net.pku.edu.cn/~yhf/linux_c/ calloc(配置内存空间) 相关函数 malloc,free,realloc,brk 表头文件 #includ ...
- [Leetcode][Python]42: Trapping Rain Water
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 42: Trapping Rain Waterhttps://oj.leetc ...
- 查看实时公网ip
icanhazip.com 使您在任何地方知道你的公网IP地址 icanhazip.com 使你在任何地方知道你的公网IP地址 icanhazip.com 使你在任何地方知道你的公网IP地址 ican ...
- cURL.1 手册页
摘自http://blog.csdn.net/huangxy10/article/details/45717793 cURL.1 手册页 名称 cURL - transfer a URL 摘要 cUR ...
- MS Sql 查询数据库连接数
SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN (SELECT [DBID]FROM [Master].[dbo].[SYSDA ...