2011-04-30 63 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