Php 向Magento Web服务API添加筛选器

Php 向Magento Web服务API添加筛选器,php,api,magento,soap-client,Php,Api,Magento,Soap Client,我正在尝试调用MagentoSOAPAPI,并获取特定时间段内的订单列表。我可以连接到API并获得所有订单的列表,但我无法(以我的生命)找出如何过滤结果。。。有什么想法吗?我返回所有订单的代码如下 $proxy = new SoapClient('http://lalala.freelunchlabs.com/api/v2_soap/?wsdl'); // create authorized session id using api user name and api key $session

我正在尝试调用MagentoSOAPAPI,并获取特定时间段内的订单列表。我可以连接到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);
$proxy=新的SoapClient('http://lalala.freelunchlabs.com/api/v2_soap/?wsdl');
//使用api用户名和api密钥创建授权会话id
$sessionId=$proxy->login('myusername','mypassword');
$filters=数组(
'已在'=>数组('>'=>'2011-04-21 02:13:00')处创建_,

'created_at'=>array('我没有使用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 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的一个示例:

本文档没有指出(据我所知)在使用条件语句时需要将“filter”替换为“complex_filter”

例如,您可以替换

'key'=>'from"

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


我使用了它,它在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)),

    ),

);

不幸的是,这里只显示了PHP代码,使用SOAP和web服务的好处之一是语言/实现独立性

为了引导其他人朝着正确的方向前进,我提供了适合我的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>

12345asdf
地位
处理

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

我实际上在这里找到了对“complex_filter”值的引用:上面提到的关于完整条件列表的链接仍然可以在上找到,您不能在同一个字段上有两个筛选器-这是Magento中的一个bug我们如何为SOAP v1 API实现相同的筛选器?我的想法完全正确@etech,我使用的是Ruby Soap gem,所有这些PHP都是我不需要的另一个抽象层。一个问题:
AssociationEntity
来自哪里?@dukedave上述XML正文中的所有内容都是Magento WSDL中定义的元素。因此,根据WSDL,
元素是
中的顶级项
element.+1用于显示XML。我只是使用SOAP UI来试验API,所以我需要自己编写XML。
$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)),

    ),

);
<?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>