2

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

下面是我为 products 参数传递的数组。我有一个自定义选项 id 1,下拉列表中选择的值 id 为 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_itemsales_flat_quote_item_option表中创建的条目,但行没有任何与自定义选项相关的数据或定价。

我究竟做错了什么?


更新:2013 年 12 月 11 日

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

4

3 回答 3

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 成功添加具有自定义选项的产品。购物车信息和总计中的定价也反映了预期价格。

于 2013-11-12T09:25:26.397 回答
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

于 2014-10-03T01:21:16.570 回答
1

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

于 2016-12-13T09:09:29.147 回答