Php 向Magento Web服务API添加筛选器
我正在尝试调用MagentoSOAPAPI,并获取特定时间段内的订单列表。我可以连接到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
$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>