我正在尝试使用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_item
和sales_flat_quote_item_option
表中创建的条目,但行没有与自定义选项相关的任何数据或定价。
我做错了什么?
更新:12/11/2013
我已将自定义选项更改为“必需”。现在当我尝试上面的SOAP请求时,它给了我一个“请指定产品所需的选项。”错误。看起来它只是忽略了我在数组中的选项键。
答案 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 =属性选项值。