magento soap api

magento soap apiSOAP:simpleobjectaccessprotocol;WSDL:webservicedescriptionlanguage;MagentoSoapV1v1扩展案例step1:在etc下新建api.xml,内容如下

大家好,又见面了,我是你们的朋友全栈君。

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)

注意事项:
vagrant+virtualbox 环境中,
必须保持 vagrantifile 中 guest 和host 的端口号一致,并且登录到虚拟机中,配置 /etc/hosts 文件,加入一行
127.0.0.1 local.example.com。
负责访问 local.example.com:post/api/soap/?wsdl 会报错如下:
Couldn’t load from ‘http://local.fenxiao.com:8081/api/soap/?wsdl’ : failed to load external entity “http://local.fenxiao.com:8081/api/soap/?wsdl

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158605.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm汉化包

    pycharm汉化包更新一个pycharm汉化包,下面给出具体炒作流程1.解压压缩包,里面一共有两个东西第一个文件夹是汉化的所有文件,(简单的说就是第二个文件解压后的文件,不过第二个文件本身并不是压缩包,只是可以用解压的方式打开而已)2.解压以后,将resources_cn复制,粘贴到pycharm的lib目录下,具体目录如下图3.将resources_cn粘贴到这个目录下…

    2022年5月9日
    52
  • 一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述

    一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述

    2022年1月23日
    63
  • 利用python、tensorflow、opencv实现人脸识别(包会)!「建议收藏」

    利用python、tensorflow、opencv实现人脸识别(包会)!「建议收藏」 一,前言本人是机械专业在读硕士,在完成暑假实践的时候接触到了人脸识别,对这一实现很感兴趣,所以花了大概十天时间做出了自己的人脸识别。这篇文章应该是很详细的了所以帮你实现人脸识别应该没什么问题。先说本博文的最终要达到的效果:通过一系列操作,在摄像头的视频流中识别特定人的人脸,并且予以标记。本人通过网上资料的查询发现这类人脸识别,大多参考了一位日本程序员小哥的文章。链接:http…

    2022年10月25日
    0
  • 用MATLAB实现对运动物体识别与跟踪

    用MATLAB实现对运动物体识别与跟踪

    2022年2月23日
    46
  • 培训java机构排行榜_北京java培训班哪家好

    培训java机构排行榜_北京java培训班哪家好要说国内的就业市场中,薪资高待遇好的当属Java软件开发岗位了,因Java软件开发的职业发展稳定获得了不少从业者的追捧。对于想要学习Java的同学来说,培训就成了进入这个行业的敲门砖,很多零基础不太懂这个行业的同学,想要找一家比较好的培训机构,都会在网络上搜索一些像“北京Java培训机构排名”这样的词,能够在其中得到一些参考,下面是通过行业口碑,Java就业率,诚信度,课程体系,Java师资,教学质量,授课方式等多方面得出的北京Java培训机构排名,参考意义很强。就算我们有了排名上的参考,也需.

    2022年10月3日
    0
  • 系统功能测试用例模板「建议收藏」

    系统功能测试用例模板「建议收藏」系统功能测试用例模板 用例名称 订单支付_银联卡支付_支付银行卡处于欺诈名单当中 用例目录 订单支付/银联卡支付/ 用例编号 Payment037 功能模块 结账支付 优先级别 2 相关需求 《结账支付功能规格说明》 数据准备 余额充足的支付用银联银行卡、已注册的前台用户 前置条件 1.用户已登录 2.用户已将商品加入购物车并触发订单结算流程 3.用户将订单支付流程推进至用银行卡支付节点 步骤 测试

    2022年7月17日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号