【问题标题】:Magento SOAP v1 cart_product.add - need to set price in options array for skuMagento SOAP v1 cart_product.add - 需要在选项数组中为 sku 设置价格
【发布时间】:2014-01-01 17:41:37
【问题描述】:
$arrProducts = array(
    array(
        "sku" => "sku1",
        "qty" => 1,
        "options" => array(
            99 => '.50' // 99 is the price attribute id, I want to set this sku to $0.50
        )
    ),
    array(
        "sku" => "sku2",
        "quantity" => 1
    )
);

$resultCartProductAdd = $client->call($session, "cart_product.add", array($shoppingCartId, $arrProducts));

在 sku1 的选项数组中,我如何设置要添加到购物车并计算结帐总额的价格?

以上选项不会改变价格。 sku 的原价仍会添加到购物车中,而不是 0.50 美元。看着How do I create a product with additional attributes in Magento via Soap/Java我还是没看懂。

我在 Magento EE 1.13 上使用 SOAP V1 调用

【问题讨论】:

  • 查看文档选项值用于产品选项,所以我认为这将用于产品的自定义选项,而不是价格等属性。我的猜测是,通过 API 添加到购物车时,magento 将始终使用配置的产品价格。为什么它必须与正常的产品价格不同?您可能需要使用客户组或分层定价来实现这一点,或者扩展 API 以便它执行您想要的操作(但由于 Magento 进行价格计算的方式,我认为这并不那么简单),或者可能使用凭证 API 调用以将优惠券添加到报价单中。
  • @AshleySwatton 您在文档中的哪个位置看到选项值仅适用于自定义产品选项?我想这个特殊的api调用可以临时设置客户群,下单后再设置回来,但是好像有点草率。我将不得不研究等级定价。不确定那个。我真的很想即时定价。
  • 它没有明确说自定义选项,但确实说“option_id => 内容形式的数组(可选)”。如果是产品属性,它可能会提到attribute_id。表 catalog_product_option 也有 option_id 作为主键,这些表引用自定义产品选项。更多的是明智的猜测。对其进行测试,为您的产品添加自定义选项并查看。即使在管理员中添加到购物车时也无法覆盖产品价格。您可以扩展 api 并将价格作为额外选项传递,也可以尝试将报价项目的基本价格设置为它。
  • P.S. Magento 的 API 文档并不是最好的,它需要大量的尝试和学习。 wiki 上有一个很好的指南,展示了如何扩展现有的 API 函数。 magentocommerce.com/wiki/doc/webservices-api/custom-api。在客户群体定价之前,magento 中只有分层定价,可以用来有效地做同样的事情。
  • 分层定价不适用于我这里的特殊需求。如果您所说的是正确的,则在 SOAP 结帐期间临时更改组以获取组定价似乎是不扩展 api 的最佳选择。我将进行更多研究,并希望其他人可以加入一些关于更改 sku 的 SOAP 价格的知识。感谢您的意见。

标签: magento


【解决方案1】:

要即时设置价格,您可以扩展 API 调用以将产品添加到购物车。模型文件 Mage_Checkout_Model_Cart_Product_Api 需要扩展并重写 add 方法以满足价格属性。它看起来像这样

class Namespace_Module_Model_Cart_Product_Api extends Mage_Checkout_Model_Cart_Product_Api
{
    public function add($quoteId, $productsData, $store=null)
    {
       ...
       $result = $quote->addProduct($productByItem, $productRequest);
       if(isset($productItem['price']) && $productItem['price'] != null) {
           $result->setOriginalCustomPrice($productItem['price']);
       }
       ...
    }
}

然后您可以像这样在 API 调用中将价格添加到数据数组中。

array(
    "sku" => "sku1",
    "qty" => 1,
    "price" => 0.50,
)

add 调用确实对报价发出了 collectTotals() 调用,因此它应该根据自定义价格重新计算税收和货币等。您可能需要修改 wsdl 文件以接受新的价格属性。未经测试,但理论上应该可以工作。

【讨论】:

  • 在 options 数组中传递这个比较容易,然后调用如下:$result->setCustomPrice($productItem['options']['price']); $result->setOriginalCustomPrice($productItem['options']['price']); $result->getProduct()->setIsSuperMode(true); $result->save();
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2011-10-10
  • 2012-12-26
  • 1970-01-01
相关资源
最近更新 更多