magento soap api

来源:互联网 发布:chrome mac 安装 编辑:程序博客网 时间:2024/05/22 13:41

SOAP: simple object access protocol;

WSDL: webservice description language;

Magento Soap V1

v1 扩展案例

step 1: 在 etc 下 新建 api.xml,内容如下

<config>    <api>        <resources>        </resources>        <acl>            <resources>                <all>                </all>            </resources>        </acl>    </api></config>

step 2: 添加一个资源信息(模块名,不要加namespace)
注意:在etc 下的XML文件中,不要使用namespace, 否则会报错,会把当前模块下的helper 去Mage下查找。
在 resource 下添加 method,method 中的元素有 list ,create,update,delete.info. 如下:

<config>  <api>    ....  <resources>     <customer translate="title" module="customer">       <title>Customer Resource</title>         <methods>         <list translate="title"module="customer">           <title>Retrive customers</title>         </list>        <create translate="title"module="customer">         <title>Create customer</title>       </create>       <info translate="title" module="customer">        <title>Retrieve customer data</title>       </info>       <update translate="title" module="customer">         <title>Update customer data</title>      </update>      <delete>        <title>Delete customer</title>      </delete>   </methods>   <faults module="customer">   </faults> </customer></resources>.... </api></config> 

其中的 faults 是报错的信息。

step3 添加权限描述

<config><api>....  <acl>   <resources>     <customer translate="title" module="customer">        <title>Customers</title>        <list translate="title" module="customer">            <title>View All</title>        </list>        <create translate="title" module="customer">           <title>Create</title>        </create>        <info translate="title" module="customer">          <title>Get Info</title>        </info>        <update translate="title" module="customer">          <title>Update</title>       </update>       <delete translate="title" module="customer">          <title>Delete</title>      </delete>   </customer> </resources></acl></api></config>

step 4 匹配ACL资源和API资源方法,通过添加ACL元素

<config>    <api>      <resources>        <customer translate="title" module="customer">            <title>Customer Resource</title>            <acl>customer</acl>            <methods>             <list translate="title" module="customer">                <title>Retrive customers</title>                <acl>customer/list</acl>                <method>items</method>             </list>           <create translate="title" module="customer">                <title>Create customer</title>                <acl>customer/create</acl>            </create>            <info translate="title" module="customer">                 <title>Retrieve customer data</title>                  <acl>customer/info</acl>             </info>           <update translate="title" module="customer">                 <title>Update customer data</title>                 <acl>customer/update</acl>            </update>         <delete translate="title" module="customer">                <title>Delete customer</title>                <acl>customer/delete</acl>            </delete>       </methods>              ....  </customer>   </resources>....    </api></config>

由于list是PHP关键字,因此用items代替list

step 5 创建PHP API 代码

class Mage_Customer_Model_Customer_Api extends Mage_Api_Model_Resource_Abstract{    public function create($customerData)    {    }    public function info($customerId)    {    }    public function items($filters)    {    }    public function update($customerId, $customerData)    {    }    public function delete($customerId)    {    }}
V2 扩展案例
<v2>   <resources_function_prefix>    <customer>customerCustomer</customer>       <customer_group>customerGroup</customer_group>       <customer_address>customerAddress</customer_address>    </resources_function_prefix></v2>

加在<api>标签中

v2 PHP 代码

这里写图片描述

v1 和v2 的区别在于
v1 方法的调用形式

$params = array(array(    'status'=>array('eq'=>'pending'),    'customer_is_guest'=>array('eq'=>'1'))));$result = $client->call($sessionId, 'sales_order.list', $params);

v2 方法的调用方式

$params = array('filter' => array(    array('key' => 'status', 'value' => 'pending'),    array('key' => 'customer_is_guest', 'value' => '1')));$result = $client->salesOrderList($sessionId, $params);

salesOrder 就是定义的方法前缀名。

v1 URL http://magentohost/api/soap/?wsdl
v2 URL http://magentohost/api/v2_soap?wsdl=1

WSDL对于soap v1 和 soap v2 是不同的。v1 自定义开发的模块,并不需要修改 wsdl.xml 文件,v2 则需要修改 wsdl.xml 文件

magento 后台配置
system -> webservice ->soap roles ,soap user
其中在 soap user中, username 和 new api key 是获得session id的重要数据

PHP soap 方法client 调用案例

$api_url_v1 = "http://host/api/soap/?wsdl=1";$username = 'username';$password = 'passord';try {$cli = new SoapClient($api_url_v1);//retreive session id from login$session_id = $cli->login($username,$password);//call customer.list method$result = $cli->call($session_id, 'catalog_product.list',array($params));}catch (SoapFault $fault){    var_dump($fault->faultstring);}print_r($result);

在client call 中,由于有的服务端需要 通过 参数的key值来获取value,所以,以php client call 中,参数形式写成如下:

$param=array('key'=>value,'key1'=>value1)
0 0
原创粉丝点击