我有一個外部網站,您可以直接從中添加產品。Magento以編程方式添加產品並重定向到結帳
所以我試圖創建一個PHP文件,它可以接收一些HTTP POST - 但它不工作。
首先,我嘗試了一些非常基本的
<?php
namespace Addtocart;
use Mage;
require __DIR__ . '/app/Mage.php';
/*
if (! isset($_POST, $_POST['data'])) {
exit;
}
*/
$data = array(
//array('id' => 2532, 'qty' => 1, 'attribute' => 92, 'value' => 11), // 002
//array('id' => 1854, 'qty' => 1),
array('id' => '5711914018542', 'qty' => 1)
);
Mage::app();
$product_model = Mage::getModel('catalog/product');
/** @var \Mage_Checkout_Model_Cart $cart */
$cart = Mage::getSingleton('checkout/cart');
$cart->init();
$errors = array();
foreach($data as $product) {
try {
$productid = (int)$product_model->getIdBySku($product['id']);
$params = array(
'product' => $productid,
'qty' => $product['qty']
);
if (array_key_exists('attribute', $product)) {
$params['super_attribute'] = array($product['attribute'] => $product['value']);
}
$p = $product_model->load($productid);
$cart->addProduct($p, $params);
} catch (\Exception $e) {
$errors[$product['id']] = $e->getMessage();
continue;
}
}
$cart->save();
$cart->getItems()->setQuote($cart->getQuote());
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
if ($errors) {
var_dump($errors);
exit;
}
header('Location: /checkout/cart/');
但車仍然是空的。
然後我試圖尋找到購物車var_dump($cart)
,發現所有的產品實際上添加,所以我的猜測是會話Mage::app()
和Mage::run()
之間的變化有什麼我能做的事堅持了會議?
- Magento的:1.7.0.2
開您也可以嘗試var轉儲附加到會話的報價ID,併爲您的發佈腳本(上面)執行相同操作,並比較兩者以確保報價ID相同。我的猜測是你正在發出一個新的會話ID在重定向到結帳/購物車。雖然magento有一個購物車對象,但引用對象是產品最終所在的位置。 – Ashley
'$ cart-> getQuote() - > getId()' - 在'header('location ...')之前和之後相同' – Martin
'session_id()'在 – Martin