2011-04-30 60 views
5

我想调用Magento SOAP API并获取特定时间段内的订单列表。我可以连接到API并获得所有订单的列表,但我无法(对于我的生活)弄清楚如何过滤结果......任何想法?我的代码,返回所有的订单是...将过滤器添加到Magento Web服务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); 

在此先感谢!

回答

7

我买了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' 
    ) 
); 
+0

你不能在同一个字段上有两个过滤器 - 这是Magento中的一个错误 – derekdreery 2014-01-24 10:19:08

+0

我们如何为SOAP v1 API实现相同的过滤器? – 2014-08-26 10:51:40

8

在的V2 Magento的API,你需要调整你的“过滤器”数组,像这样:

$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

本文档并未指出(据我所知),在使用条件语句时,您需要用'complex_filter'替换'filter'。

例如,您可以取代

'key'=>'from" 

'key'=>'to' 

'key'=>'eq' 

,你可以使用条件的更完整的列表在这里:

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

+2

我实际上可以在这里找到对'complex_filter'值的引用:http://www.magentocommerce.com/api/soap/sales/salesOrder/sales_order.list.html – David 2012-07-13 20:15:12

+0

提到的关于条件完整列表的链接仍可以在http://web.archive.org/web/20140902022328/http://100101.kurodust找到。net/2008/10/24/magento-api-calls-filter-parameters/ – user2094178 2017-12-30 05:46:03

1

我用这一点,它在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格式。

+1

我的想法正是@etech,我正在使用Ruby Soap gem,而所有这些PHP都是我不需要的另一个抽象层。一个问题:'associativeEntity'从哪里来? – dukedave 2014-09-16 21:37:46

+1

@dukedave上述XML正文中的所有内容都是Magento WSDL中定义的元素。因此,根据WSDL,一个''元素是''元素中的顶层项目。 – etech 2014-10-06 04:37:43

+0

+1用于显示XML。我只是使用SOAP UI来试验API,所以我需要自己编写XML。 – psyklopz 2017-01-02 18:26:05