我有一个外部网站,您可以直接从中添加产品。
所以我尝试创建一个可以接收一些HTTP POST的php文件 - 但是它不起作用。
首先我尝试了一些非常基本的
<?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()
之间发生了变化可以做到坚持会议?
答案 0 :(得分:2)
此处的代码可以使用,它会添加多个产品
<?php
namespace Addtocart;
require __DIR__ . '/app/Mage.php';
use Mage;
if (! isset($_GET, $_GET['p'])) {
var_dump($_GET);
exit;
}
Mage::app();
/** @var \Mage_Core_Model_Session */
$coresession = Mage::getSingleton('core/session', array('name'=>'frontend'));
/** @var \Mage_Checkout_Model_Session $session */
$session = Mage::getSingleton('checkout/session');
$session->start();
$session->clear();
/** @var \Mage_Catalog_Model_Product $product_model */
$product_model = Mage::getModel('catalog/product');
/** @var \Mage_Checkout_Model_Cart $cart */
$cart = Mage::getSingleton('checkout/cart');
$cart->init();
$cart->truncate();
$errors = array();
foreach($_GET['p'] as $product) {
$product = json_decode($product, true);
try {
$productid = (int)$product_model->getIdBySku(urldecode($product['id']));
$params = array(
'product' => $productid,
'qty' => $product['qty']
);
if (array_key_exists('attribute', $product)) {
$params['super_attribute'] = array($product['attribute'] => $product['value']);
}
$cart->addProduct($productid, $params);
} catch (\Exception $e) {
$errors[$product['id']] = $e->getMessage() . ' (Product: ' . print_r($product, true) . ')';
continue;
}
}
$cart->save();
$session->setCartWasUpdated(true);
if ($errors) {
var_dump($errors);
exit;
}
if ($cart->getQuote()->getHasError()) {
var_dump($cart->getQuote()->getHasError());
exit;
}
header('Location: /checkout/cart/');
要使用它,请使用以下
向文件发送GET请求p[]={"id":"<config-sku>","attribute":<attr>,"value":<value>,"qty":<qty>}&p[]={"id":"<simple-sku>","qty":<qty>}
答案 1 :(得分:0)
尝试使用Magento内置的URL系统将此作为来自外部网站的get请求。
对于简单产品:http://www.magentosite.com/checkout/cart/add?product=1001&qty=1
您还可以执行自定义选项:http://www.magentosite.com/checkout/cart/add?product=1001&qty=1&options[12]=57&options[15]=32