在Magento中通过SOAP将产品添加到购物车时设置自定义选项

时间:2013-11-11 04:58:30

标签: php magento soap magento-1.7

我正在尝试使用shoppingCartProductAdd SOAP API将带有自定义选项的产品添加到购物车。

下面是我为products参数传递的数组。我有一个自定义选项ID 1,下拉列表中的选定值ID为2.(您可以查看product here

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

此产品已添加到购物车,但当我检索购物车详情/总计时,它不会反映自定义选项。我还手动检查了在sales_flat_quote_itemsales_flat_quote_item_option表中创建的条目,但行没有与自定义选项相关的任何数据或定价。

我做错了什么?


更新:12/11/2013

我已将自定义选项更改为“必需”。现在当我尝试上面的SOAP请求时,它给了我一个“请指定产品所需的选项。”错误。看起来它只是忽略了我在数组中的选项键。

3 个答案:

答案 0 :(得分:2)

经过大量调试和调整后,事实证明'选项'必须作为 associativeArray 传递,其中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成功添加带有自定义选项的产品。购物车信息和总计中的定价也反映了预期价格。

答案 1 :(得分:1)

在深入研究核心文件后,我发现了问题以及修补它的简单方法。

问题是“cart_product.add”/“shoppingCartProductAdd”的SOAP API接受一系列产品选项和超级属性以及关键的“选项”,如上所述,但是准备产品的代码要添加到购物车,请使用密钥“super_attribute”查找此信息。要修补,我只需将“options”数组复制到cart_product.add api中的“super_attribute”数组。

我把补丁文件放在这里可能会有所帮助:https://github.com/mezzi/magento-api-patches/blob/master/0001-fix-soap-api-configurable-product-options.patch

答案 2 :(得分:1)

API文档不完整。 http://devdocs.magento.com/guides/m1x/api/soap/checkout/cartProduct/cart_product.add.html

您需要' super_attribute'而不是'选项'添加可配置产品时。

这是通过购物车添加产品时报价对象的转储。

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 = attribute_id和optionValue_1 =属性选项值。