我正在尝试在php中开发一个代码,该代码将从旧订单中获取订单增量ID,并将创建包含相同产品的新订单以及产品自定义选项(如果有)。 获取par即使可以通过查询字符串添加产品也可以,但是我无法添加自定义选项。购物车页面显示:需要产品自定义选项。
我认为(不确定)我甚至成功通过soap api添加了带有自定义选项的产品,但是当我重定向到购物车时它显示了一个空的购物车。
我是初学者,所以如果它存在,请忽略任何愚蠢。 :d 带有查询字符串的代码如下:
$form_key = Mage::getSingleton('core/session')->getFormKey();
$arrProducts = array(
/*array
(
"product" => "3",
"qty" => 7
),*/
array
(
"product" => "1",
"qty" => 3,
"options" => array
(
2 => array(
"date" => "11/12/13",
"date_internal" => "2013-12-11 00:00:00"
),
1 => "1"
)
header('Location: '.Mage::getUrl('checkout/cart/add/form_key/'.$form_key.'/', $arrProduct));
因此,这会指向包含该产品的页面,但要求我选择产品选项。 当我使用上面评论的其他产品时,它取得了成功。
即使我现在能够在购物车中添加没有自定义(带有id ='3'的产品)选项的产品。代码如下:
<?php
require('../../../app/Mage.php'); //include mage.php
Mage::app();
Mage::getSingleton('core/session', array('name' => 'frontend'));
$form_key = Mage::getSingleton('core/session')->getFormKey();
//echo $form_key;
$cart = Mage::getSingleton('checkout/cart');
$product = new Mage_Catalog_Model_Product();
$product->load(2);
//$product->setProductOptions();
$params = array(
array
(
"product" => "3",
"qty" => 1
),
array
(
"product" => "2",
"qty" => 2,
"options" =>array
(
2 => array
(
"date" => "11/12/2013",
"date_internal"=> "2013-12-11 00:00:00"
),
1 => "1"
)
)
);
$cart->addProduct($product, $params);
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
header('Location:http://111.111.1.1/magento/checkout/cart');
?>
但它不适用于任何带有自定义选项的产品(ID为'2'的产品)。 错误消息:
致命错误:未捕获的异常“Mage_Core_Exception”,并显示消息“请指定所需的产品选项”。在C:\ xampp \ htdocs \ magento \ app \ Mage.php:594堆栈跟踪:#0 C:\ xampp \ htdocs \ magento \ app \ code \ core \ Mage \ Checkout \ Model \ Cart.php(284): Mage :: throwException('请指定...')#1 C:\ xampp \ htdocs \ magento \ pratmagento \ panel \ orders \ try2addtocart.php(53):Mage_Checkout_Model_Cart-&gt; addProduct(Object(Mage_Catalog_Model_Product),Array)在第594行的C:\ xampp \ htdocs \ magento \ app \ Mage.php中抛出#2 {main}
答案 0 :(得分:0)
需要为产品设置website_ids。
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));