Добавление фильтров в API веб-сервисов Magento - PullRequest
6 голосов
/ 01 мая 2011

Я пытаюсь вызвать 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);

Заранее спасибо!

Чак

Ответы [ 4 ]

9 голосов
/ 13 июля 2012

В 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

эта документация не указывает (насколько я могу судить), что вам нужно заменить 'filter' на 'complex_filter' при использовании условных операторов.

Например, вы можете заменить

'key'=>'from"

с

'key'=>'to'

или

'key'=>'eq'

Более полный список условий, которые вы можете использовать, находится здесь:

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

9 голосов
/ 01 мая 2011

У меня нет опыта работы с 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'
    )
);
6 голосов
/ 08 июня 2013

К сожалению, здесь показан только PHP-код. Одним из преимуществ использования SOAP и веб-сервисов в целом является независимость от языка / реализации.

Чтобы направить других в правильном направлении, я предоставляю 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>

Обратите внимание, что это формат SOAP v2 для Magento.

1 голос
/ 08 мая 2013

Я использовал это, и оно работало в 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)),

    ),

);
...