Настройка пользовательских параметров при добавлении продукта в корзину через SOAP в Magento

Я пытаюсь использовать API-интерфейс shoppingCartProductAdd SOAP для добавления продукта с пользовательскими настройками в корзину.

Ниже представлен массив, который я передаю для параметра products. У меня есть индивидуальный параметр id 1, для которого выбранный идентификатор значения в раскрывающемся списке равен 2. (вы можете просмотреть этот продукт здесь )

array (size=1) 0 => array (size=3) 'product_id' => int 25 'qty' => int 1 'options' => array (size=1) 1 => int 2 

Этот продукт добавляется в корзину, но когда я получаю данные / итоговые данные корзины, он не отражает пользовательские параметры. Я также вручную проверил запись, созданную в sales_flat_quote_item и sales_flat_quote_item_option , но строки не содержат никаких данных или цен, связанных с настраиваемой опцией.

Что я делаю не так?


Обновление: 12/11/2013

Я изменил пользовательскую опцию, чтобы быть «обязательным». Теперь, когда я пробую вышеуказанный запрос SOAP, он дает мне «Пожалуйста, укажите требуемый продукт (ы)». ошибка. Похоже, что это просто игнорирование ключа параметров в массиве.

После большой отладки и возиться, оказывается, что «параметры» должны быть переданы как ассоциативный массив, который в терминах SOAP должен быть определен следующим образом:

 array (size=1) 0 => array (size=3) 'product_id' => int 25 'qty' => int 1 'options' => array (size=1) 0 => array (size=2) 'key' => int 1 'value' => int 2 

Подробнее об этом формате здесь – https://stackoverflow.com/a/8963453/515268

Используя этот формат, я могу успешно добавлять продукты с настраиваемыми опциями через SOAP. Цены на информацию о корзине и итоговые суммы также отражают ожидаемую цену.

После копания в основных файлах я нашел проблему и простой способ ее исправления.

Проблема заключается в том, что SOAP API для «cart_product.add» / «shoppingCartProductAdd» принимает массив параметров продукта и супер-атрибутов с ключевыми «параметрами», как вы это делали выше, но код, который подготавливает продукт к добавлению в корзину ищет эту информацию, используя ключ «super_attribute», вместо этого. Для исправления я просто просто скопировал массив «options» в массив «super_attribute» в файле cart_product.add api.

Здесь я помещаю файл патча, который может помочь: https://github.com/mezzi/magento-api-patches/blob/master/0001-fix-soap-api-configurable-product-options.patch

Документация API неполна. http://devdocs.magento.com/guides/m1x/api/soap/checkout/cartProduct/cart_product.add.html

При добавлении настраиваемых продуктов вам требуется «super_attribute» вместо «options».

Это дамп из объекта цитаты при добавлении продуктов через корзину.

 Mage_Sales_Model_Quote::addProduct->request=Varien_Object Object ( [_data:protected] => Array ( [product_id] => 2002 [qty] => 1 [super_attribute] => Array ( [0] => Array ( [207] => 1002 ) ) ) 

Вот как ваш массив должен быть структурирован.

 $arrProducts = array( array( "product_id" => "1", "qty" => 2 "super_attribute" => array( optionId_1 => optionValue_1 ) ) ); $resultCartProductAdd = $proxy->call( $sessionId, "cart_product.add", array( $quoteId, $arrProducts ) ); 

Обратите внимание, что optionId_1 = атрибут_ид и optionValue_1 = значение параметра атрибута.