【问题标题】:Adding Filters to Magento Web Services API向 Magento Web 服务 API 添加过滤器
【发布时间】:2011-08-16 05:49:15
【问题描述】:

我正在尝试调用 Magento SOAP API 并获取特定时间段内的订单列表。我可以连接到 API 并获得所有订单的列表,但我无法(对于我的一生)弄清楚如何过滤结果......有什么想法吗?我返回所有订单的代码如下...

$proxy = new SoapClient('http://lalala.freelunchlabs.com/api/v2_soap/?wsdl');

// create authorized session id using api user name and api key
$sessionId = $proxy->login('myusername', 'mypassword');

$filters = array(
    'created_at' => array( '>' => '2011-04-21 02:13:00'),
    'created_at' => array( '<' => '2011-04-21 02:22:00')
);

 // Get order list
$orderinfo = $proxy->salesOrderList($sessionId,array($filters));

print_r($orderinfo);

提前致谢!

查克

【问题讨论】:

    标签: php api magento soap-client


    【解决方案1】:

    我没有使用 Magento SOAP 2 Api 的经验,但如果 V2 中的过滤器的工作方式与 V1 相同,您可以试试这个:

    $filters = array(
        'created_at' => array(
            'from' => '2011-04-21 02:13:00',
            'to' => '2011-04-21 02:22:00'
        )
    );
    

    【讨论】:

    • 你不能在同一个字段上有两个过滤器 - 这是 Magento 中的一个错误
    • 我们如何为 SOAP v1 API 实现相同的过滤器??
    【解决方案2】:

    在 Magento API v2 中,您需要像这样调整“过滤器”数组:

    $params = array('complex_filter'=>
        array(
            array('key'=>'created_at','value'=>array('key' =>'from','value' => '2012-07-05 01:01:01'))
        )
    );
    

    虽然他们的 API 在此处显示了 API v2 的示例:

    http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/introduction#api_version_v2

    本文档并未表明(据我所知)在使用条件语句时需要将“filter”替换为“complex_filter”。

    例如,您可以替换

    'key'=>'from"
    

    'key'=>'to'
    

    'key'=>'eq'
    

    您可以使用的更完整的条件列表如下:

    http://100101.kurodust.net/2008/10/24/magento-api-calls-filter-parameters/

    【讨论】:

    【解决方案3】:

    我使用了它,它在 SOAP API v2 中工作:

    $params = array('complex_filter'=>
        array(
            array('key'=>'created_at','value'=>array('key' =>'from','value' => '2013-05-03 01:01:01')),
            array('key'=>'customer_id','value'=>array('key' =>'eq','value' => 3)),
    
        ),
    
    );
    

    【讨论】:

      【解决方案4】:

      我认为这里只显示 PHP 代码很遗憾。一般来说,使用 SOAP 和 Web 服务的好处之一是语言/实现独立性。

      为了引导其他人朝着正确的方向前进,我提供了适合我的 XML。无论您使用哪种语言进行 SOAP 调用,您的请求中的以下 XML 格式都应该有效。

      例如,使用 Java 和 Apache Axis 2,这是我的 SOAPEnvelope 对象的内容。获取状态为“处理中”的所有订单的列表:

      <?xml version="1.0" encoding="utf-8"?>
      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
          <soapenv:Body>
              <salesOrderList xmlns="urn:Magento">
                  <sessionId xmlns="">12345asdf</sessionId>
                  <filters xmlns="">
                      <filter>
                          <associativeEntity>
                              <key>status</key>
                              <value>processing</value>
                          </associativeEntity>
                      </filter>
                  </filters>
              </salesOrderList>
          </soapenv:Body>
      </soapenv:Envelope>
      

      注意,这是 Magento 的 SOAP v2 格式。

      【讨论】:

      • 我的想法完全是@etech,我使用的是Ruby Soap gem,所有这些PHP 都是我不需要的另一层抽象。一问:associativeEntity从何而来?
      • @dukedave 上述 XML 正文中的所有内容都是 Magento WSDL 中定义的元素。因此,根据 WSDL,&lt;associativeEntity&gt; 元素是 &lt;filter&gt; 元素中的顶级项。
      • +1 用于显示 XML。我只是使用 SOAP UI 来试验 API,所以我需要自己编写 XML。
      猜你喜欢
      • 2015-01-22
      • 2018-03-14
      • 2020-05-12
      • 1970-01-01
      • 2019-11-11
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      相关资源
      最近更新 更多